实现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 }
原文地址:https://www.cnblogs.com/dongweiq/p/3873552.html