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);
        }

    }

  • 相关阅读:
    GTD时间管理(1)---捕获搜集
    ios面试总结-
    Swift入门篇-结构体
    Swift入门篇-闭包和函数
    swift入门篇-函数
    Swift入门篇-集合
    Swift入门篇-循环语句
    Swift入门篇-基本类型(3)
    Swift入门篇-基本类型(2)
    Swift入门篇-基本类型(1)
  • 原文地址:https://www.cnblogs.com/ldq2016/p/5819164.html
Copyright © 2011-2022 走看看