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的子类: 在一些情况下, ...
随机推荐
- 【转】Cocos2d-x 3.1.1 学习日志6--30分钟了解C++11新特性
[转]Cocos2d-x 3.1.1 学习日志6--30分钟了解C++11新特性 Cocos2d-x 3.1.1 学习日志6--30分钟了解C++11新特性
- 启动项目时tomcat问题汇总
最近SVN上迁下来的新项目,在刚运行项目时tomcat就报错了.以前也经常遇到,没太引起注意,今天终于决定将这个问题好好总结一下. 首先 1.错误:An internal error occurred ...
- php 计算时间添加
$Date_1=date("Y-m-d");$Date_2="2015-10-11";$d1=strtotime($Date_1);$d2=strtotime( ...
- 基于虚拟数据的行人检测研究(Expecting the Unexpected: Training Detectors for Unusual Pedestrians with Adversarial Imposters)
Paper Link : https://arxiv.org/pdf/1703.06283 Github: https://github.com/huangshiyu13/RPNplus 摘要: 这篇 ...
- 详略。。设计模式2——单例变形(多例).。。。studying
★ 缓存在单例中的使用("单例+缓存"技术) 缓存在编程中使用非常频繁,有着非常关键的数据,它可以帮助程序实现以空间换取时间, 通常被设计成整个应用程序所共享的一个空间,现要求实现 ...
- HasMany() = (1..*) HasOptional() = (1..0,1) HasRequired() = (1..1)
http://www.cnblogs.com/yeagen/archive/2012/10/15/2724237.html
- 0、手把手教React Native实战之开山篇
##作者简介 东方耀 Android开发 RN技术 facebook github android ios 原生开发 react reactjs nodejs 前端 ...
- OGRE 保存纹理到文件
Ogre::TexturePtr tex = Ogre::TextureManager::getSingleton( ).getByName( "YaHeiTexture" ); ...
- 51、自定义View基础和原理
一.编写自己的自定义View最简单的自定义View,继承View通过覆盖View的onDraw方法来实现自主显示利用Canvas和paint来绘制显示元素(文字,几何图形等) <com.myvi ...
- [MySQL] 变量(参数)的查看和设置 [转]
[MySQL] 变量(参数)的查看和设置 类似于Oracle的参数文件,MySQL的选项文件(如my.cnf)用于配置MySQL服务器,但和Oracle叫法不一样,在MySQL里, 官方叫变量(Var ...