源地址:http://stackoverflow.com/questions/6369491/stop-listview-scroll-animation
第一种方法为利用反射来完成,代码如下:
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) {
}
}
}
第二种方法为:
listView.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_CANCEL, 0, 0, 0));
如果listView是经过自己重写的ListView, 而且在滚动停止后需要做额外的处理,可以在onTouchEvent(MotionEvent ev)内用以下代码来做:
switch (ev.getAction()) {
case MotionEvent.ACTION_CANCEL:
//setSelection(Integer.MAX_VALUE / 2);
break;
default:
break;
}