我们通常在ListView或者GridView响应点击Item事件,但很多时候我们同样也

希望监听到点击空白区域的事件来做更多的处理。本文以GridView为例给出一个实现

的方法,扩展GridView并可作为通用控件使用。ListView的实现应该也大同小异

好吧,原来之前写过另外一篇,不过监控的是ACTION_UP事件,但这篇更加通用

代码比较简单,先贴代码再做下解释

public class MyGridView extends GridView {
public interface OnTouchInvalidPositionListener {
/**
* motionEvent 可使用 MotionEvent.ACTION_DOWN 或者 MotionEvent.ACTION_UP等来按需要进行判断
* @return 是否要终止事件的路由
*/
boolean onTouchInvalidPosition(int motionEvent);
}
/**
* 点击空白区域时的响应和处理接口
*/
public void setOnTouchInvalidPositionListener(OnTouchInvalidPositionListener listener) {
mTouchInvalidPosListener = listener;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if(mTouchInvalidPosListener == null) {
return super.onTouchEvent(event);
}
if (!isEnabled()) {
// A disabled view that is clickable still consumes the touch
// events, it just doesn't respond to them.
return isClickable() || isLongClickable();
}
final int motionPosition = pointToPosition((int)event.getX(), (int)event.getY());
if( motionPosition == INVALID_POSITION ) {
super.onTouchEvent(event);
return mTouchInvalidPosListener.onTouchInvalidPosition(event.getActionMasked());
}
return super.onTouchEvent(event);
}
}

主要是重载了触摸处理函数,并利用api pointToPosition取得当前点击的item,当你点击空白区域的时候,

会返回INVALID_POSITION,由此便可判断点击了空白区域。

使用的话如下代码所示。在onTouchInvalidPosition事件中你可以做自己的响应操作,

通常用得比较多的是“点击空白地方取消当前操作”。这里我是用来实现点击空白地方让父容器

显示触摸变色效果。 注意return返回值的意义,当返回false的时候代表交由父级控件处理,这里的

效果通常会让外层的Layout显示被点击效果。当return true的时候表示你已经处理了该事件并不

让该事件再往上传递。

mGridView.setOnTouchInvalidPositionListener(new OnTouchInvalidPositionListener() {
@Override
public boolean onTouchInvalidPosition(int motionEvent) {
return false; //不终止路由事件让父级控件处理事件
}
});

效果图如下,点击红色圈的地方整个Layout会变色,当然变色这个你的Layout得先设置对应的drawable。

GridView点击空白地方事件扩展的更多相关文章

  1. android 实现点击listview 空白地方隐藏菜单

    思路:重写ListView的setOnTouchListener事件: ListView.setOnTouchListener(new OnTouchListener(){ @Override pub ...

  2. 点击其它地方隐藏div/事件冒泡/sweet-alert阻止冒泡

    点击document时把div隐藏,但点击div时阻止点击事件冒泡到document,从而实现“点击文档其它地方隐藏div,点击div本身不隐藏”.js代码如下:$("#div") ...

  3. Runtime学习与使用(一):为UITextField添加类目实现被键盘遮住后视图上移,点击空白回收键盘

    OC中类目无法直接添加属性,可以通过runtime实现在类目中添加属性. 在学习的过程中,试着为UITextField添加了一个类目,实现了当TextField被键盘遮住时视图上移的功能,顺便也添加了 ...

  4. C# GridView点击某列打开新浏览器窗口

    C# GridView点击某列打开新窗口的方式: (1)打开浏览器新窗口:蓝色部分 通过超链接. (2)打开模式化窗口:通过OnRowCommand事件,弹出模式化窗口. 具体如下: <asp: ...

  5. 【转】Android点击空白区域,隐藏输入法软键盘

    原文网址:http://www.2cto.com/kf/201505/401382.html 很多时候,我们在使用应用时,会出现输入法软键盘弹出的问题,通常情况下,我们默认会使用户点击返回键或者下一步 ...

  6. GridView的RowCreated与RowDataBound事件区别

    在西门子面试时,项目负责人除了道试题关于RowCreated与RowDataBound事件区别,经过google一下,得出结果: GridView的RowCreated与RowDataBound的一个 ...

  7. 微信小程序之实现slideUp和slideDown效果和点击空白隐藏

    怎样实现jq中的slideUp或者slideDown这种动画效果呢,我的思路是用css3的transform: translateY()属性,给需要动画的元素添加上一个动画class. 先上效果图: ...

  8. jqeury点击空白关闭弹窗

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 点击EditText可编辑,点击其他地方不可编辑

    我是在Fragment中实现的,在网上查了,有的说要回调Activity的onTouch事件,通过实验直接在Fragment中即可.如下: 我的EditText在ScrollView,因为Scroll ...

随机推荐

  1. 工作流管理系统 jBPM

    工作流管理系统 jBPM 运行环境: 授权方式:BSD 软件大小:M 下载量:589 更新日期:2014-04-04 来源地址: 联系作者:Linux     jBpm是一个灵活可扩展的工作流管理系统 ...

  2. 【转】NP-Hard和NP-Complete的区别

    原文来自:http://hi.baidu.com/nuclearspace/item/e0f8a1b777914974254b09f4 对 NP-Hard问题和NP-Complete问题的一个直观的理 ...

  3. Qt分析:Qt中的两种定时器(可是QObject为什么要提高定时器呢,没必要啊。。。)

    Qt有两种定时器,一种是QObject类的定时器,另一种是QTimer类的定时器.   (1)QObject类的定时器   QObject类提供了一个基本的定时器,通过函数startTimer()来启 ...

  4. Windows Phone 8初学者开发—第7部分:本地化应用程序

    原文 Windows Phone 8初学者开发—第7部分:本地化应用程序 第7部分:本地化应用程序 原文地址: http://channel9.msdn.com/Series/Windows-Phon ...

  5. Spring Boot gradle

    最近有写一个电子订单商务网站,使用JAVA8,SPRING,ANGULARJS对项目使用的技术和大家分享. 第一次写博客,哪有不对需要改正的请联系改正. 因为是项目是我给别人做的无法提供源码见谅,我尽 ...

  6. 【Java】:多线程下载

    import java.io.InputStream; import java.io.RandomAccessFile; import java.net.URL; import java.net.UR ...

  7. BZOJ 1618: [Usaco2008 Nov]Buying Hay 购买干草

    题目 1618: [Usaco2008 Nov]Buying Hay 购买干草 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 679  Solved:  ...

  8. mysql记录慢查询

    1,配置开启 Linux: 在mysql配置文件my.cnf中增加 log-slow-queries=/var/lib/mysql/slowquery.log (指定日志文件存放位置,可以为空,系统会 ...

  9. CoreAnimation (CALayer 动画)

    CoreAnimation基本介绍: CoreAnimation动画位于iOS框架的Media层 CoreAnimation动画实现需要添加QuartzCore.Framework CoreAnima ...

  10. Python+Django+SAE系列教程11-----request/pose/get/表单

    表单request,post,get 首先我们来看看Request对象,在这个对象中包括了一些实用的信息,学过B/S开发的人来说这并不陌生,我们来看看在Django中是怎样实现的: 属性/方法 说明 ...