Android ViewGroup onInterceptTouchEvent
public boolean onInterceptTouchEvent (MotionEvent ev)
Implement this method to intercept all touch screen motion events. This allows you to watch events as they are dispatched to
your children, and take ownership of the current gesture at any point.
Using this function takes some care, as it has a fairly complicated interaction with View.onTouchEvent(MotionEvent), and using it
requires implementing that method as well as this one in the correct way. Events will be received in the following order:
1)You will receive the down event here.
2)The down event will be handled either by a child of this view group, or given to your own onTouchEvent() method to handle;
this means you should implement onTouchEvent() to return true, so you will continue to see the rest of the gesture. Also, by
returning true from onTouchEvent(), you will not receive any following events in onInterceptTouchEvent() and all touch processing
must happen in onTouchEvent() like normal.
3)For as long as you return false from this function, each following event will be delivered first here and then to the target's
onTouchEvent().
4)If you return true from here, you will not receive any following events. the target view will receive the same event but with
the action ACTION_CANCEL, and all further events will be delivered to your onTouchEvent() method and no longer appear here.
1)在 onInterceptTouchEvent()接收到down事件
2)ViewGroup 或者 ViewGroup里面的 View 都可以处理 down事件
3)只要onInterceptTouchEvent()返回false, 则剩下的事件都会先发送到onInterceptTouchEvent(),再发送到目标对象的onTouchEvent()
4)如果onInterceptTouchEvent()返回true, 则剩下的事件不会发送到ViewGroup 的 onInterceptTouchEvent()和目标对象的onTouchEvent()
只会发送给ViewGroup 的 onTouchEvent()
Returns:
- Return true to steal motion events from the children and have them dispatched to this ViewGroup through onTouchEvent().
The current target will receive an ACTION_CANCEL event, and no further messages will be delivered here.
返回true会调用ViewGroup的onTouchEvent()。
一。实验代码
1.ViewGroup
public class GlingLayout extends FrameLayout {
private static String tag = GlingLayout.class.getSimpleName();
public GlingLayout(Context context){
super(context);
}
public GlingLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.e(tag, " --- down");
break;
case MotionEvent.ACTION_MOVE:
Log.e(tag, " --- move");
break;
case MotionEvent.ACTION_UP:
Log.e(tag, " --- up");
break;
case MotionEvent.ACTION_CANCEL:
Log.e(tag, " --- cancel");
break;
default:
break;
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.e(tag, " --------------------- down");
break;
case MotionEvent.ACTION_MOVE:
Log.e(tag, " ------------------ move");
break;
case MotionEvent.ACTION_UP:
Log.e(tag, " ----------------- up");
break;
case MotionEvent.ACTION_CANCEL:
Log.e(tag, " ----------------- cancel");
break;
default:
break;
}
return true;
}
}
2.View
package com.gl; import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.Button; public class GlingButton extends Button { private static String tag = GlingButton.class.getSimpleName(); public GlingButton(Context context){
super(context);
} public GlingButton(Context context, AttributeSet attrs) {
super(context, attrs);
} @Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.e(tag, " down ---------------");
break;
case MotionEvent.ACTION_MOVE:
Log.e(tag, " move --------------- ");
break;
case MotionEvent.ACTION_UP:
Log.e(tag, " up ---------------");
break;
case MotionEvent.ACTION_CANCEL:
Log.e(tag, " cancel ---------------");
break;
default:
break;
}
return true;
} }
二.结果
1.onInterceptTouchEvent返回false时

2.1.onInterceptTouchEvent返回true时

三。让ViewGroup不能截断TouchEvent
public void requestDisallowInterceptTouchEvent (boolean disallowIntercept)
Called when a child does not want this parent and its ancestors to intercept touch events with onInterceptTouchEvent(MotionEvent).
This parent should pass this call onto its parents. This parent must obey this request for the duration of the touch (that is, only clear the flag after this parent has received an up or a cancel.
Parameters
Android ViewGroup onInterceptTouchEvent的更多相关文章
- ViewGroup onInterceptTouchEvent,ViewGroup onTouchEvent,View onTouchEvent执行顺序说明
今天抽出了一些时间实践了viewgroup和view的触摸事件顺序,之前也试过,总是忘记,今天记下笔记说明一下 首先 onInterceptTouchEvent只会出现在viewgroup中,view ...
- Android在onInterceptTouchEvent与onTouchEvent
onInterceptTouchEvent: onInterceptTouchEvent是在ViewGroup里面定义的.Android中的layout布局类一般都是继承此类的.onIntercept ...
- Android中onInterceptTouchEvent、dispatchTouchEvent及onTouchEvent的调用顺序及内部原理
在Android中需要经常对用户手势进行判断,在判断手势时需要精细的分清楚每个触摸事件以及每个View对事件的接收情况,在View,ViewGroup,Activity中都可以接收事件,在对事件进行处 ...
- Android ViewGroup拦截触摸事件具体解释
前言 在自己定义ViewGroup中.有时候须要实现触摸事件拦截.比方ListView下拉刷新就是典型的触摸事件拦截的样例. 触摸事件拦截就是在触摸事件被parent view拦截,而不会分发给其ch ...
- android ViewGroup事件分发机制
1:事件分销过程 自定义一个LinearLayout,重写dispatchTouchEvent onInterceptTouchEvent onTouchEvent,定义一个按键重写dispathcT ...
- Android -- ViewGroup源码分析+自定义
1,我们前三篇博客了解了一下自定义View的基本方法和流程 从源码的角度一步步打造自己的TextView 深入了解自定义属性 onMeasure()源码分析 之前,我们只是学习过自定义View,其实自 ...
- Android ViewGroup等容器控件的使用
在Android中,可以自定义类,继承ViewGroup等容器类,以实现自己需要的布局显示.如果你在ViewGroup中增加了控件,却无法显示出 来,那么下面这个例子,就可以用来参考了.(主要是要实现 ...
- Android ViewGroup使用小结
ViewGroup定义 在api中是这么描写叙述ViewGroup的:A ViewGroup is a special view that can contain other views. 依据意思我 ...
- Android ViewGroup点击效果(背景色)
在开发Android应用的界面时,我们必然会用到本文ViewGroup,尤其是FrameLayout,LinearLayout,RelativeLayout等ViewGroup的子类: 在一些情况下, ...
随机推荐
- poj 1806 Frequent values(RMQ 统计次数) 详细讲解
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1806 题目大意:给你一个非降序排列的整数数组,你的任务是对于一系列的询问,(i,j),回答序列中出现次 ...
- Linux下出现Read-only file system的解决办法
正常运行中的网站,忽然间出现session目录不可写,连接服务器一看,任何关于写硬盘的命令都不能用,提示Read-only file system,使用一条命令即可搞定此问题: mount -o re ...
- vim 设置
TL;DR: $ git clone https://github.com/sontek/dotfiles.git $ cd dotfiles $ ./install.sh vim Download ...
- Flex远程访问获取数据--HTTPService
编写service类: package services { import com.adobe.serialization.json.JSON; import log.LogUtil; import ...
- 【Python】Webpy 源码学习
那么webpy是什么呢? 阅读它的源码我们又能学到什么呢? 简单说webpy就是一个开源的web应用框架(官方首页:http://webpy.org/) 它的源代码非常整洁精干,学习它一方面可以让我们 ...
- thinkphp5 No input file specified.
.htaccess文件中的 RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 在默认情况下会导致No input file specified. 修改成 Rewri ...
- 运行jsp需要安装_______Web服务器。
运行jsp需要安装_______Web服务器. A.Apache B.tomcat C.WebLogic D.IIS 解答:BC Apache是PHP程序运行的服务器,IIS是.net程序运行的服务器 ...
- (转)Unity笔记之编辑器(Foldout、HelpBox、InspectorTitlebar、Slider、MinMaxSlid ...
1. Foldout.HelpBox 折叠菜单,大家都知道,不具体解释了,直接代码.因为折叠菜单中必然是有内容才能看到效果,所以顺带把HelpBox(提示框)也说了. [code]csharpcode ...
- Jmeter_远程启动 I
Jmeter 是Java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误. 其实,Jmeter的 ...
- 66、多种多样的App主界面Tab(1)------ ViewPager实现Tab
<?xml version="1.0" encoding="utf-8"?> <!-- bottom.xml --> <Linea ...