GridView代码如下:
public class NoScrollGridView extends GridView { private OnTouchInvalidPositionListener mTouchInvalidPosListener; public NoScrollGridView(Context context, AttributeSet attrs) { super(context, attrs); } public NoScrollGridView(Context context) { super(context); } public NoScrollGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } public interface OnTouchInvalidPositionListener { boolean onTouchInvalidPosition(int motionEvent); } public void setOnTouchInvalidPositionListener(OnTouchInvalidPositionListener listener) { mTouchInvalidPosListener = listener; } @Override public boolean onTouchEvent(MotionEvent event) { if(mTouchInvalidPosListener == null) { return super.onTouchEvent(event); } if (!isEnabled()) { return isClickable() || isLongClickable(); } final int motionPosition = pointToPosition((int)event.getX(), (int)event.getY()); if( motionPosition == INVALID_POSITION ) { super.onTouchEvent(event); return mTouchInvalidPosListener.onTouchInvalidPosition(event.getActionMasked()); } return super.onTouchEvent(event); } }
ListView 同理:
public class NoScrollListView extends ListView { public NoScrollListView(Context context) { super(context); } public NoScrollListView(Context context, AttributeSet attrs) { super(context, attrs); } public NoScrollListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int mExpandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, mExpandSpec); } }
本文介绍如何为GridView和ListView实现无滚动功能,通过重写onMeasure方法限制高度,同时提供自定义滚动无效位置监听接口,确保用户体验不受影响。

1507

被折叠的 条评论
为什么被折叠?



