回答
那么肯定有办法做到这一点。但我认为,关键是要做到这一点是否明智。
该列表是一个标准的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. 在列表视图上停止AsyncTAsk滚动
- 5. 触摸停止在列表视图上滚动不起作用
- 6. onChildClick事件在滚动列表视图后停止
- 7. 如何停止上面的第一项滚动列表视图?
- 8. JQuery Tools可滚动 - 停止动画?
- 9. 如何停止滚动动画
- 10. 动画时停止滚动tableview
- 11. 停止滚动动画不起作用?
- 12. 不要停止在列表视图中的动画
- 13. iOS动画滚动视图
- 14. 从动画视图停止transitionFormViewControllerWillAppear
- 15. Android ListView在滚动视图内停止滚动
- 16. Android:滚动视图停止滚动时检测
- 17. Android:当水平滚动视图停止滚动时检测
- 18. 停止滚动视图滚动延伸超出内容界限
- 19. 动画imageview停止动画
- 20. JQuery停止动画队列
- 21. 滚动列表视图
- 22. 滚动列表视图
- 23. 滚动列表视图
- 24. 上滚动列表视图
- 25. 列表视图滚动
- 26. 在列表视图滚动
- 27. TableView /滚动视图列表
- 28. 列表视图和动画
- 29. 列表视图OnitemClick动画
- 30. 列表视图动画
我会回应MarvinLabs关于保持您的列表与用户*期望*工作方式一致的意见。 – 2011-06-16 09:30:36