一、禁止滾動,高度不可設
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); } }