实现gridview空白处的点击事件

Posted 一点点征服

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现gridview空白处的点击事件相关的知识,希望对你有一定的参考价值。

今天做了一个girdview,要求长按item出现删除按钮,点击空白处取消,长按出现按钮可以,但是点击空白处有问题,如果点击到书籍的空白处 可以用适配器的布局点击事件处理,但是空白区域不是item,不能使用setonitemclick事件解决,而且gridview也不允许直接设置 onclick事件,因此只有重写gridview的touch事件才可以,以下是别人的代码,稍加修改后完成的

自定义gridview

 

 

package com.issmobile.numlibrary.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.GridView;

/**
 * 自定义GridView
 */
public class CustomGridView extends GridView {

    private float mTouchX;
    private float mTouchY;
    private OnTouchBlankPositionListener mTouchBlankPosListener;

    public CustomGridView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public CustomGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomGridView(Context context) {
        super(context);
    }


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (mTouchBlankPosListener != null) {
            if (!isEnabled()) {
                return isClickable() || isLongClickable();
            }
            int action = event.getActionMasked();
            float x = event.getX();
            float y = event.getY();
            final int motionPosition = pointToPosition((int) x, (int) y);
            if (motionPosition == INVALID_POSITION) {
                switch (action) {
                case MotionEvent.ACTION_DOWN:
                    mTouchX = x;
                    mTouchY = y;
                    mTouchBlankPosListener.onTouchBlank(event);
                    break;
                case MotionEvent.ACTION_MOVE:
                    if (Math.abs(mTouchX - x) > 10
                            || Math.abs(mTouchY - y) > 10) {
                        mTouchBlankPosListener.onTouchBlank(event);
                    }
                    break;
                case MotionEvent.ACTION_UP:
                    mTouchX = 0;
                    mTouchY = 0;
                    mTouchBlankPosListener.onTouchBlank(event);
                    break;
                }
            }
        }
        return super.onTouchEvent(event);
    }

    /**
     * 设置GridView的空白区域的触摸事件
     *
     * @param listener
     */
    public void setOnTouchBlankPositionListener(
            OnTouchBlankPositionListener listener) {
        mTouchBlankPosListener = listener;
    }

    public interface OnTouchBlankPositionListener {
        void onTouchBlank(MotionEvent event);
    }

}

以上是关于实现gridview空白处的点击事件的主要内容,如果未能解决你的问题,请参考以下文章

android 对gridview 外层linearlayout 设置点击事件,怎么还点到gridview(gridview没点击事件)?

使用js冒泡实现点击空白处关闭弹窗

ListView,GridView点击事件

GridView(网格视图)+MotionEvent(触控事件)实现可以拖动排序的网格图

如何在gridview android上处理事件点击和长按?

iOS 怎么给tableview空白处添加点击事件而不影响cell中的一些按钮的事件