我们通常在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. JS拖动浮动DIV

    <!DOCTYPE html> <html> <head> <meta charset="utf8"> <title>j ...

  2. python3.4.3如何获取文件的路径

    #coding:utf-8from tkinter import *from tkinter import filedialogroot = Tk()root.filename = filedialo ...

  3. FPGA知识大梳理(三)verilogHDL语法入门(2)知识汇总

    1,时序逻辑.将上次的练习修改成时序逻辑会如何设计. always @ (posedge clock) 2,block 与unblocking  A,有clock的always中通常使用nonbloc ...

  4. 什么是AOI自动光学检测机测试技术

    前言 当印刷电路板的价格以每年六到八个百分点的速度持续滑落,产品的生产良率就成为维持产业竞争力的要素.要获得高的良品率需要有良好的制造控制能力,而要获得良好的制程控制,似乎就必须要在各个制程中执行良好 ...

  5. 英文:known good assembly(KGA) / 中文:确认好的组装件,已知好组装件

    英文:known good assembly(KGA) / 中文:确认好的组装件,已知好组装件 正确地操作印制板装配,并可作为标准件与其它同类型装配件比较的组装.也称黄金组装.

  6. VC程序快速删除自己(可能做升级程序的时候有用)

    项目一般都会带有卸载程序,如果这个程序是自己来做的话,在调用完卸载程序后需要删除自己的所有文件,在Google了好久终于找到一些相关信息,一般只能删除一个文件,经过自己的处理,可以删除文件夹下面所有内 ...

  7. Data Structure(2)

    在大体看过一遍<数据结构导论>的基础上完成了上一篇的博客,周五晚上通过上讲课,还是发现了一些问题的,主要体现在对第一章看的比较粗心,第一章的概论其实是对整本书的整体概况,这里没有多看上几遍 ...

  8. Android经常使用UI组件 - TextView

    TextView是Android里面用的最多的UI组件,一般使用在须要显示一些信息的时候,其不能输入,仅仅能初始设定或者在程序中改动. 实例:TextViewDemo 执行效果: 代码清单: 布局文件 ...

  9. Unity的Cover flow的实现包(2个)

    苹果的mac机上预览图片,有一个所谓的cover flow的效果,这里收集到两个,两个实现效果略有不同. 1.老外的实现 https://github.com/rakkarage/Unity3D-Co ...

  10. Python相关项目和技术

    下面的项目是<Learn PYTHON the hard way>里面的,以后可能会补充: 1.Django,创建web程序的框架:https://www.djangoproject.co ...