回答
那么肯定有办法做到这一点。但我认为,关键是要做到这一点是否明智。
该列表是一个标准的Android控件,在所有应用程序中表现持续不变。所以如果我发现一个在应用程序中表现不一样的列表,我会感到惊讶。您可以随时将手指放回屏幕上以停止投掷。这就是说,如果你想做额外的工作,你可以继承列表视图并覆盖它的触摸方法。知道该怎么做的最好方法是获取ListView的源代码(ListView in Android 1.6)。
我的看法是,你不应该修改这种行为,因为这种行为是用户期望的行为。
但是,你的问题。我没有尝试过,但理论上它应该起作用。
执行OnScrollListener
到您的ListView
并使用onScrollStateChanged()
方法检查当前状态是否为SCROLL_STATE_FLING
。在确定一次掷骰的滚动操作之后,您可以使用getFirstVisiblePosition()
方法获得ListView
的第一个可见位置,然后可以使用smoothScrollToPosition()
,将值作为参数。
我没有尝试Pompe de velo
的解决方案,但由于smoothScrollToPosition()
不适用于低于8的API级别,所以这不适用于我。
我同意,改变默认行为是不是一个很好的想法,但有时你需要。所以这里是我使用反射的(肮脏的)解决方案。这是迄今为止不推荐的方式,因为它是一种黑客攻击,但它对我很有用。可能有更好的解决方案,但我没有找到它。
class StopListFling {
private static Field mFlingEndField = null;
private static Method mFlingEndMethod = null;
static {
try {
mFlingEndField = AbsListView.class.getDeclaredField("mFlingRunnable");
mFlingEndField.setAccessible(true);
mFlingEndMethod = mFlingEndField.getType().getDeclaredMethod("endFling");
mFlingEndMethod.setAccessible(true);
} catch (Exception e) {
mFlingEndMethod = null;
}
}
public static void stop(ListView list) {
if (mFlingEndMethod != null) {
try {
mFlingEndMethod.invoke(mFlingEndField.get(list));
} catch (Exception e) {
}
}
}
}
,我们查找了Android的源代码(AbsListView),给它一个ACTION_CANCEL的TouchEvent,可以停止一扔。这很容易。
listView.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_CANCEL, 0, 0, 0));
这是正确的答案。这应该被接受,因为它没有任何反思。好的工作伙伴! – 2014-01-23 20:23:14
您可以通过重写onTouchEvent并调用smoothScrollBy来防止API 8中的ListViews抛出。
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_UP:
this.smoothScrollBy(0, 0);
break;
}
return super.onTouchEvent(ev);
}
取而代之的是从投掷滚动和滚动0px开始。
- 1. 停止滚动视图动画时低于某个速度
- 2. 如何停止滚动动画
- 3. 停止滚动动画不起作用?
- 4. JQuery Tools可滚动 - 停止动画?
- 5. iOS动画滚动视图
- 6. Android ListView在滚动视图内停止滚动
- 7. Android:滚动视图停止滚动时检测
- 8. Android:当水平滚动视图停止滚动时检测
- 9. 滚动列表视图
- 10. 上滚动列表视图
- 11. TableView /滚动视图列表
- 12. 列表视图滚动
- 13. 滚动列表视图
- 14. 列表视图和动画
- 15. 列表视图动画
- 16. 列表视图OnitemClick动画
- 17. 如何在滚动时停止列表视图中的清单列表项目
- 18. 更新的UITextView里面的UIScrollView而滚动,使滚动视图停止滚动
- 19. 在滚动视图中的特定滚动后停止滚动 - Titanium
- 20. 滚动视图内的列表视图
- 21. 在滚动视图时停止在recyclerview中的项目动画android
- 22. 为滚动视图启用滚动而不是列表视图
- 23. 滚动视图滚动列表视图不是布局
- 24. 列表视图不滚动滚动视图内
- 25. 如何停止滚动画廊?
- 26. iPhone:如何停止视图中的动画视图释放前
- 27. popviewcontroller从视图2导致视图1停止动画背景
- 28. 视图滚动时终止
- 29. UIGestureRecognizer阻止表视图滚动
- 30. 页停止滚动
我会回应MarvinLabs关于保持您的列表与用户*期望*工作方式一致的意见。 – 2011-06-16 09:30:36