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;
        }


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