实现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 }

 

你可能感兴趣的:(GridView)