ListView 强制停止滚动

源地址: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;
        }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章