Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 實現ListView不可滾動效果

Android 實現ListView不可滾動效果

編輯:關於Android編程


希望得到的效果是ListView不能滾動,但是最大的問題在與ListView Item還必有點擊事件,如果不需要點擊事件那就簡單了,直接設置ListView.setEnable(false);

如果還需要點擊事件,滾動與點擊都是在ListView Touch處理機制管理。

ListView點擊事件是復用ViewGroup的處理邏輯,當用戶點擊視圖並且按下與抬起手指之間移動距離很小,滿足點擊事件的時間長度限制,就會觸發點擊事件。

ListView滾動事件是自己處理,有兩個判斷條件,當用戶觸發move事件並且滑動超過touch slop距離 或者 滑動速度超過閥值都會判定為滾動事件。


import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ListView;

public class ScrollDisabledListView extends ListView {
 
    private int mPosition;
 
    public ScrollDisabledListView(Context context) {
        super(context);
    }
 
    public ScrollDisabledListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
 
    public ScrollDisabledListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
 
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        final int actionMasked = ev.getActionMasked() & MotionEvent.ACTION_MASK;
 
        if (actionMasked == MotionEvent.ACTION_DOWN) {
            // 記錄手指按下時的位置
            mPosition = pointToPosition((int) ev.getX(), (int) ev.getY());
            return super.dispatchTouchEvent(ev);
        }
 
        if (actionMasked == MotionEvent.ACTION_MOVE) {
            // 最關鍵的地方,忽略MOVE 事件
        	// ListView onTouch獲取不到MOVE事件所以不會發生滾動處理
            return true;
        }
 
        // 手指抬起時
        if (actionMasked == MotionEvent.ACTION_UP
        		|| actionMasked == MotionEvent.ACTION_CANCEL) {
            // 手指按下與抬起都在同一個視圖內,交給父控件處理,這是一個點擊事件
            if (pointToPosition((int) ev.getX(), (int) ev.getY()) == mPosition) {
                super.dispatchTouchEvent(ev);
            } else {
            	// 如果手指已經移出按下時的Item,說明是滾動行為,清理Item pressed狀態
                setPressed(false);
                invalidate();
                return true;
            }
        }
 
        return super.dispatchTouchEvent(ev);
    }
}

參考資料:

Disable scrolling in Android ListView


Disable scrolling in listview

轉載請注明出處:

Android 設置ListView不可滾動

http://blog.csdn.net/androiddevelop/article/details/38815493




  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved