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

    }

  • 相关阅读:
    hadoop balance
    随笔
    ubuntu server 使用parted分区
    程序员内功续
    hadoop——hdfs多硬盘挂载
    hdfs老数据压缩备份的一些问题20120521
    hadoop balance failed
    hoj 2524 Allocate Dormitories 二分图的最大匹配
    HDOJ 分类(转)
    hoj 3008 Matryoshka Dolls Again 最大独立子集
  • 原文地址:https://www.cnblogs.com/ldq2016/p/5819164.html
Copyright © 2011-2022 走看看