博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现gridview空白处的点击事件
阅读量:5889 次
发布时间:2019-06-19

本文共 1921 字,大约阅读时间需要 6 分钟。

今天做了一个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);
    }
}

    本文转自 一点点征服   博客园博客,原文链接:http://www.cnblogs.com/ldq2016/p/5819164.html,如需转载请自行联系原作者

你可能感兴趣的文章
CentOS图形界面和命令行切换
查看>>
HTML5通信机制与html5地理信息定位(gps)
查看>>
加快ALTER TABLE 操作速度
查看>>
PHP 程序员的技术成长规划
查看>>
python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
查看>>
js replace,正则截取字符串内容
查看>>
作业2
查看>>
nginx的信号量
查看>>
云im php,网易云IM
查看>>
DEFERRED_SEGMENT_CREATION
查看>>
Ada boost学习
查看>>
开源 java CMS - FreeCMS2.3字典管理
查看>>
block,inline和inline-block概念和区别
查看>>
移动端常见随屏幕滑动顶部固定导航栏背景色透明度变化简单jquery特效
查看>>
javascript继承方式详解
查看>>
lnmp环境安装sh脚本
查看>>
白话讲反射技术 --- 适合初学者入门引导
查看>>
css变形 transform
查看>>
win7家庭版添加组策略编辑器
查看>>
iOS 一个开发者账号 多台Mac 共用
查看>>