实现gridview空白处的点击事件
今天做了一个girdview,要求长按item出现删除按钮,点击空白处取消,长按出现按钮可以,但是点击空白处有问题,如果点击到书籍的空白处可以用适配器的布局点击事件处理,但是空白区域不是item,不能使用setonitemclick事件解决,而且gridview也不允许直接设置onclick事件,因此只有重写gridview的touch事件才可以,以下是别人的代码,稍加修改后完成的
自定义gridview
1 package com.issmobile.numlibrary.view; 2 3 import android.content.Context; 4 import android.util.AttributeSet; 5 import android.view.MotionEvent; 6 import android.widget.GridView; 7 8 /** 9 * 自定义GridView 10 */ 11 public class CustomGridView extends GridView { 12 13 private float mTouchX; 14 private float mTouchY; 15 private OnTouchBlankPositionListener mTouchBlankPosListener; 16 17 public CustomGridView(Context context, AttributeSet attrs, int defStyle) { 18 super(context, attrs, defStyle); 19 } 20 21 public CustomGridView(Context context, AttributeSet attrs) { 22 super(context, attrs); 23 } 24 25 public CustomGridView(Context context) { 26 super(context); 27 } 28 29 30 @Override 31 public boolean onTouchEvent(MotionEvent event) { 32 if (mTouchBlankPosListener != null) { 33 if (!isEnabled()) { 34 return isClickable() || isLongClickable(); 35 } 36 int action = event.getActionMasked(); 37 float x = event.getX(); 38 float y = event.getY(); 39 final int motionPosition = pointToPosition((int) x, (int) y); 40 if (motionPosition == INVALID_POSITION) { 41 switch (action) { 42 case MotionEvent.ACTION_DOWN: 43 mTouchX = x; 44 mTouchY = y; 45 mTouchBlankPosListener.onTouchBlank(event); 46 break; 47 case MotionEvent.ACTION_MOVE: 48 if (Math.abs(mTouchX - x) > 10 49 || Math.abs(mTouchY - y) > 10) { 50 mTouchBlankPosListener.onTouchBlank(event); 51 } 52 break; 53 case MotionEvent.ACTION_UP: 54 mTouchX = 0; 55 mTouchY = 0; 56 mTouchBlankPosListener.onTouchBlank(event); 57 break; 58 } 59 } 60 } 61 return super.onTouchEvent(event); 62 } 63 64 /** 65 * 设置GridView的空白区域的触摸事件 66 * 67 * @param listener 68 */ 69 public void setOnTouchBlankPositionListener( 70 OnTouchBlankPositionListener listener) { 71 mTouchBlankPosListener = listener; 72 } 73 74 public interface OnTouchBlankPositionListener { 75 void onTouchBlank(MotionEvent event); 76 } 77 78 }