Android修行笔记(四):为GridView添加点击空白地方的响应函数

 

 

GridView为我们提供了 OnItemClickListener, 不过有时候我们需要获取用户点击空白区域的事件来做某些操作。

比如类似微信群管理界面里边,在删除成员状态时可以点击空白区域取消当前操作状态。而不巧的是这个很基本的功能

SDK没直接提供,网上也很少能搜到资料,于是我就扩展了一个出来。

     原理就是重载GridView类的 onTouchEvent 函数,然后在点击Up事件中使用 pointToPosition 函数来检查是否该

次点击的点对应的条目索引,如果返回一个-1值则说明没有点击到任何一个 Item。于是我们就可以在这里进行回调处理。

具体步骤如下。

    首先你使用一个自定义的类,如

  public class MyGridView extends GridView ,然后添加以下代码即可

 public interface OnTouchBlankPositionListener {
        /**
         * 
         * @return 是否要终止事件的路由
         */
        boolean onTouchBlankPosition();
    }
    
    public void setOnTouchBlankPositionListener(OnTouchBlankPositionListener listener) {
        mTouchBlankPosListener = listener;
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        
        if(mTouchBlankPosListener != null) {
            if (!isEnabled()) {
                // A disabled view that is clickable still consumes the touch
                // events, it just doesn't respond to them.
                return isClickable() || isLongClickable();
            }
                
            if(event.getActionMasked() == MotionEvent.ACTION_UP) {
                final int motionPosition = pointToPosition((int)event.getX(), (int)event.getY());
                if( motionPosition == Blank_POSITION ) {
                    return mTouchBlankPosListener.onTouchBlankPosition();
                }
            }
        }

        return super.onTouchEvent(event);
    }

  需要注意的两点细节是:

          1、处理时onTouchBlankPosition要返回true以终止路由事件的传播
          2、要捕捉ACTION_UP事件,如果使用ACTION_DOWN会在实际中出现点击两次的问题,可能是因为
     一次触摸会导致多次ACTION_DOWN事件

转载于:https://www.cnblogs.com/Kecp/p/GridView.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值