android自定義控件之禁止ListView滾動


一、禁止滾動,高度不可設

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

/**
 * 禁止滾動的ListView
 * Created by Administrator on 2015/10/21 0021.
 */
public class NoScrollListview extends ListView{

    public NoScrollListview(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    /**
     * 設置不滾動
     */
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);

    }

}

 

二、禁止滾動,高度可設

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM