zoukankan      html  css  js  c++  java
  • 实现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);
        }

    }

  • 相关阅读:
    已设定选项readonly请加!强制执行
    Linux下NVIDIA显卡驱动安装方法
    C#使用MiniDump导出内存快照MiniDumper
    一些陈旧的注册表垃圾清理脚本:注册表冗余数据清理.reg
    脚本精灵一些脚本
    本地安装SonarQube Community8.1社区版进行代码质量管控
    spring redistemplate中使用setHashValueSerializer的设置hash值序列化方法
    spring-core-5.0.6.RELEASE-sources.jar中java源代码不全
    lombok插件/slf4j中字符串格式化
    light4j/light-4j一个轻量级的低延时、高吞吐量、内存占用量小的API平台
  • 原文地址:https://www.cnblogs.com/ldq2016/p/5819164.html
Copyright © 2011-2022 走看看