GridView点击空白地方事件扩展
我们通常在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点击空白地方事件扩展的更多相关文章
- android 实现点击listview 空白地方隐藏菜单
思路:重写ListView的setOnTouchListener事件: ListView.setOnTouchListener(new OnTouchListener(){ @Override pub ...
- 点击其它地方隐藏div/事件冒泡/sweet-alert阻止冒泡
点击document时把div隐藏,但点击div时阻止点击事件冒泡到document,从而实现“点击文档其它地方隐藏div,点击div本身不隐藏”.js代码如下:$("#div") ...
- Runtime学习与使用(一):为UITextField添加类目实现被键盘遮住后视图上移,点击空白回收键盘
OC中类目无法直接添加属性,可以通过runtime实现在类目中添加属性. 在学习的过程中,试着为UITextField添加了一个类目,实现了当TextField被键盘遮住时视图上移的功能,顺便也添加了 ...
- C# GridView点击某列打开新浏览器窗口
C# GridView点击某列打开新窗口的方式: (1)打开浏览器新窗口:蓝色部分 通过超链接. (2)打开模式化窗口:通过OnRowCommand事件,弹出模式化窗口. 具体如下: <asp: ...
- 【转】Android点击空白区域,隐藏输入法软键盘
原文网址:http://www.2cto.com/kf/201505/401382.html 很多时候,我们在使用应用时,会出现输入法软键盘弹出的问题,通常情况下,我们默认会使用户点击返回键或者下一步 ...
- GridView的RowCreated与RowDataBound事件区别
在西门子面试时,项目负责人除了道试题关于RowCreated与RowDataBound事件区别,经过google一下,得出结果: GridView的RowCreated与RowDataBound的一个 ...
- 微信小程序之实现slideUp和slideDown效果和点击空白隐藏
怎样实现jq中的slideUp或者slideDown这种动画效果呢,我的思路是用css3的transform: translateY()属性,给需要动画的元素添加上一个动画class. 先上效果图: ...
- jqeury点击空白关闭弹窗
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 点击EditText可编辑,点击其他地方不可编辑
我是在Fragment中实现的,在网上查了,有的说要回调Activity的onTouch事件,通过实验直接在Fragment中即可.如下: 我的EditText在ScrollView,因为Scroll ...
随机推荐
- 如何优化你的JS脚本来减少reflow/repaint?
如何优化你的脚本来减少reflow/repaint?1. 避免在document上直接进行频繁的DOM操作,如果确实需要可以采用off-document的方式进行,具体的方法包括但不完全包括以下几种: ...
- tomcat简介之web.xml详解(转)
http://blog.csdn.net/facepp/archive/2008/04/19/2306602.aspx 位于每个Web应用的WEB-INF路径下的web.xml文件被称为配置描述符,这 ...
- MySQL root密码重置报错:mysqladmin: connect to server at 'localhost' failed的解决方案!
-- ==================================================================== -- mysqladmin: connect to s ...
- 【Eclipse】离线插件安装
1.在eclipse里根目录里,dropins里建一个目录,名字叫sonar(这个名字随便),再在svn下面建一个目录eclipse.在根目录里建一个目录links目录,并建一个sonar.link文 ...
- C++,对象成员的访问
成员变量和成员函数的访问可以采用以下几种访问方式:对象.成员变量名: 对象.成员函数名(实参列表)对象的指针->成员变量名; 对象的指针->成员函数名(实参列表)对象的引用.成员变量名对象 ...
- 【论文阅读】Retrieving Similar Similar Styles to Parse Clothing(相关工作)
发表于2015年5月PAMI 作者: Kota Yamaguchi, M.Hadi Kiapour, Luis E. Ortiz, Tamara L. Berg 相关工作: [服装检索Clothing ...
- vim常用操作技巧与配置
vi是linux与unix下的常用文本编辑器,其运行稳定,使用方便,本文将分两部分对其常用操作技巧和配置进行阐述,其中参考了网上的一些文章,对作者表示感谢 PART1 操作技巧 说明: 以下的例子中 ...
- windows服务怎么向应用程序发消息(部署在同一台机,非SCOKET)
命名管道:NamedPipeClientStream & NamedPipeClientStream 参考实例:http://msdn.microsoft.com/zh-cn/library/ ...
- PHP脚本实现凯撒加(解)密
原文:PHP脚本实现凯撒加(解)密 今天在看某ctf时候遇到一题凯撒加密的题,然后看到write up里有这样一句 顿时感觉这题目有点坑啊,这要不写个脚本来跑要推到啥时候啊,于是又了本文: <? ...
- Android常用动画Frame-By-Frame Animations的使用
在Android的动画中有一种叫做Frame by Frame 的动画效果,就是跟Flash播放一样,是一帧一帧地显示,如果动画是连续并且有规律的话,就跟播放视频一样. 首先在drawable目录下添 ...