我们通常会在活动里重写 onTouchEvent() 方法,来监听滑动事件,如下: @Override public boolean onTouchEvent(MotionEvent event...) { Toast.makeText(MainActivity.this, "slipe", Toast.LENGTH_SHORT).show(); //继承了Activity的onTouchEvent...Toast.makeText(MainActivity.this, "向右滑", Toast.LENGTH_SHORT).show(); } } return super.onTouchEvent...ev) { Toast.makeText(MainActivity.this, "slipe", Toast.LENGTH_SHORT).show(); //继承了Activity的onTouchEvent
在一个View里面覆盖了onTouchEvent 方法,会报warning Custom view overrides onTouchEvent but not performClick 处女座的我...warning 解决: 1,再覆盖一个方法: @Override public boolean performClick() { return super.performClick(); } 2,在onTouchEvent
视频说明 通过SurfaceView中点击事件其实相对来说很简单,只要重写onTouchEvent事件就可以。 在参数event里面的getRawX和getRawY就可以获取到点击的坐标点。...实现思路 点击时进行计算处理 在onTouchevent事件中获取到屏幕的宽和高。 通到getRawx和getRawY的坐标计算出在总屏幕中位置比例。...然后在VaccaeSurfaceView中直接重写onTouchEvent事件,如下: ?
前一篇文章《Android SurfaceView onTouchEvent配合OpenCV显示》介绍了Android SurfaceView中通过onTouchEvent事件点击后在OpenCV中画了个圆显示出来...,本身onTouchEvent还可以有按下,移动,抬起的捕获,所以本篇我们在上一篇的基础上做一下进阶的显示。...上面为onTouchEvent事件,把手指按下、移动、抬起时的操作都进行了处理,代码如下: @Override public boolean onTouchEvent(MotionEvent event
上一篇博文onTouchEvent(一) 你所必须知道的坐标详解介绍了onTouchEvent()手势控制相关的一些坐标概念,这篇文章结合上一篇内容加上Scroller实现一个简单的带黏性滑动的ScrollView...的头部,如果超出三分之二就滑动到下个view 首先看看我们需要做些什么,自定义View要复写的方法有好几个,我们要复写的有: 1. onMeasure() 2. onLayout() 3. onTouchEvent...onTouchEvent 首先提醒下getScrollY()、getScrollX()这两个方法获取的是当前的偏移量,初始状态都为0,左移累加正值,右移累加负值,上移累加正值,下移累加负值。...如果看不懂其中坐标操作等请参考前一篇文章 onTouchEvent(一) 你所必须知道的坐标详解 ? ? ? ? 该说明的都在注释里标明了,毕竟后面解释的话来回滚动很麻烦。...首先onTouchEvent()中调用了Scroller.startScroll()方法,该方法不涉及UI操作所以在后面调用了一次invalidate()让View去重绘,根据上面的computeScroll
我很喜欢这样的文章,知识点写在我的书上并不能让你提高,转化为你自己的知识,才是提高的唯一途径,所以这次我破例在公众号发布这篇不是我写的文章,同时也希望Suma能够继续记录更多的学习内容~加油 onTouchEvent
, onClick及onLongClick的调用机制 针对屏幕上的一个View控件,Android怎样区分应当触发onTouchEvent,还是onClick,亦或是onLongClick事件?...onTouchEvent onTouchEvent中要处理的最经常使用的3个事件就是:ACTION_DOWN、ACTION_MOVE、ACTION_UP。...onClick、onLongClick与onTouchEvent 以前看过一篇帖子提到,假设在View中处理了onTouchEvent,那么就不用再处理onClick了,由于Android仅仅会触发当中一个方法...的话,onTouchEvent是最先捕捉到ACTION_DOWN和ACTION_UP事件的,其次才可能触发onClick或者onLongClick。...基本的逻辑在View.java中的onTouchEvent方法中实现的: case MotionEvent.ACTION_DOWN: mPrivateFlags |= PRESSED;
方法事件传递机制 四、View 的事件传递 1、View .dispatchTouchEvent 方法事件传递机制 2、View .onTouchEvent 方法事件传递机制 五、事件分发示意图 总结...(MotionEvent event) { return super.onTouchEvent(event); } } View 涉及到 dispatchTouchEvent ,...false / super.onTouchEvent(event) ; 事件分发 : 这是事件传递的终点, 返回值无所谓 ① 返回 true 说明事件被消费了 ; /** * 针对...返回 false / super.onTouchEvent(event) , 则需要继续向下传递 * 向父容器的 onTouchEvent 传递 * *...*/ @Override public boolean onTouchEvent(MotionEvent event) { return super.onTouchEvent
Paste_Image.png ---- 前言 前面用到了 dispatchTouchEvent 和 onTouchEvent 分别表示 分发事件 和 触摸消费的事件 我们可以发现, Activity...(MotionEvent ev) { TouchEventUtil.logActionMsg(getClass(),"onTouchEvent",ev); return...super.onTouchEvent(ev); } } ---- 代码简述 这3个类之间,没有直接关系,只是layout中简单的关系 ?...----> noMsg MainActivity ---- onTouchEvent ----> ACTION_DOWN ----> noMsg ?...----> noMsg MainActivity ---- onTouchEvent ----> ACTION_DOWN ----> noMsg ?
(MotionEvent event) { Log.e(TAG,"MainActivity:onTouchEvent"); return super.onTouchEvent...(MotionEvent event) { Log.e(TAG,"MyViewGroup:onTouchEvent"); return super.onTouchEvent...(MotionEvent event) { Log.e(TAG,"MyView:onTouchEvent"); return super.onTouchEvent(event...(MotionEvent event) { Log.e(TAG,"MainActivity:onTouchEvent"); return super.onTouchEvent...(MotionEvent event) { Log.e(TAG,"MainActivity:onTouchEvent"); return super.onTouchEvent
MainActivity onTouchEvent ?...ViewGroup1 onTouchEvent MainActivity onTouchEvent I/System.out: MainActivity...ViewGroup2 onTouchEvent ViewGroup1 onTouchEvent MainActivity...onTouchEvent I/System.out: MainActivity dispatchTouchEvent MainActivity onTouchEvent ?...返回super.onTouchEvent(event),有一个环节出现意外都无法触发 对于ViewGroup2(也就是View1的父容器),所有均默认,如果View1的onTouchEvent返回
(MotionEvent event) { super.onTouchEvent(event); Log.i(str, "onTouchEvent");...(MotionEvent event) { // 重写父类的处理触摸事件的方法 super.onTouchEvent(event); Log.i(str, "onTouchEvent...super.onTouchEvent(event); Log.i(str, "onTouchEvent"); return false; } }...我们把 MyView 的 onTouchEvent 方法的返回值改为 true,LinearLayout 、FrameLayout 方法的 onInterceptTouchEvent 方法和 onTouchEvent...接下来我们会发现 FrameLayout 、 LinearLayout 的 onTouchEvent 方法都不会被调用,因为触摸事件在 MyView 的 onTouchEvent 事件中就被处理消耗掉了
Paste_Image.png ---- 我们先看下View对应可以Override的方法 boolean dispatchTouchEvent(MotionEvent ev); boolean onTouchEvent...Paste_Image.png (图片来自网上,如果侵占作者权益,联系我删除) dispatchTouchEvent 可以理解成 下达做面包的指令 onTouchEvent 可以理解成 具体做面包 -...(MotionEvent ev) { TouchEventUtil.logActionMsg(getClass(),"onTouchEvent",ev); return...不同的是,会回传调用 Activity的 onTouchEvent ** 对应ViewGroup来说, 会从最高的地方,传递到ViewGroup, 获取到OnTouchEvent 后 ,并不会消费带哦...,而是会再次往回调用到最高地方的 OnTouchEvent 才结束 **
举例说明一下为什么要考虑上面这几点,如果事件传到了一个没有子View的View里面,这时view的onTouchEvent()会被回调,我们可以通过重写onTouchEvent()的返回值来决定是否消费这个事件...View的onTouchEvent()消费down事件,其他默认。 ViewGroup2的onTouchEvent()消费down事件,其他默认。...// down事件消费过程开始 ( 1955): MyViewGroup2--->onTouchEvent ( 1955): MyViewGroup1-->onTouchEvent ( 1955...->onTouchEvent ( 1955): MainActivity->dispatchTouchEvent //move2事件 ( 1955): MainActivity->onTouchEvent...而且用onTouchEvent()的返回值来描述是否消费事件是没有问题的(不消费事件的View根本调用不到onTouchEvent())。
图 3. 3、dispatchTouchEvent 和 onTouchEvent return false的时候事件都回传给父控件的onTouchEvent处理。 ? 图 4....对于dispatchTouchEvent 返回 false 的含义应该是:事件停止往子View传递和分发同时开始往父控件回溯(父控件的onTouchEvent开始从下往上回传直到某个onTouchEvent...return false 是回溯到父View的onTouchEvent,然后ViewGroup怎样通过dispatchTouchEvent方法能把事件分发到自己的onTouchEvent处理呢,return...return false 是回溯会父类的onTouchEvent,怎样把事件分发给自己的onTouchEvent 处理呢,那只能return super.dispatchTouchEvent,View类的...4、 不传给子View,事件终止往下传递,事件开始回溯,从父View的onTouchEvent开始事件从下到上回归执行每个控件的onTouchEvent------->return false; 注:
返回true表示消耗事件,那么事件流的后续部分还会传递过来;返回false表示不消耗事件,事件将交给上级View的onTouchEvent()处理,如果上级View的onTouchEvent()仍然返回...false,那么事件将再交给上级的上级处理,以此类推,如果各级View的onTouchEvent()都不消耗事件,那么事件最终将交给Activity的onTouchEvent()处理。...中的流程到达了View的onTouchEvent方法中。...: 1 | 是否消耗事件:true 当View的onTouchEvent不消耗事件时,事件会交给ViewGroup的onTouchEvent方法处理,而从log可以看出ViewGroup的onTouchEvent...而如果ViewGroup这里路也不通,那么探路人就只能去Activity的onTouchEvent那里了,后续部队也直接去Activity的onTouchEvent这里就可以了。
主要测试dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent方法调用流程。 为了时刻拿出来复习,决定发出来,与大家分享。...第1种情况 L.onInterceptTouchEvent=false&& L.onTouchEvent=true &&T.onTouchEvent=true 输出下面的Log ?...第2种情况 L.onInterceptTouchEvent=false&& L.onTouchEvent=true &&T.onTouchEvent=false 输出下面的Log: ?...第3种情况 L.onInterceptTouchEvent=true&& L.onTouchEvent=true 输出下面的Log: ?...第4种情况 L.onInterceptTouchEvent=true&& L.onTouchEvent=false 输出下面的Log: ? (标签:android、View、事件分发)
@Override public boolean onTouchEvent(MotionEvent event) { return super.onTouchEvent(event); } 所有拥有事件传递能力的类...、OnTouchEvent View:拥有dispatchTouchEvent 、OnTouchEvent 三、View的事件传递机制 3.1 dome 虽然说ViewGroup是View的子类,但是这是说的...返回父类同名方法,super.dispatchTouchEvent 或者 super.OnTouchEvent。...方法处理,该方法返回 true 时进行消费不再传递,返回 false 时再由内向外传递,由外层的 OnTouchEvent 处理。...} return super.onTouchEvent(event); } } main_activity.xml 文件 <?
、onInterceptTouchEvent 、onTouchEvent 5、布局文件 6、不做任何处理的正常流程 7、ViewGroupB的onTouchEvent()返回ture 8、是7的特殊情况...0 I/_tag: ViewGroupB onTouchEvent:0 I/_tag: ViewGroupA onTouchEvent:0 I/_tag: Activity onTouchEvent...不再调用onTouchEvent。...0 I/_tag: ViewGroupB onTouchEvent:0 I/_tag: ViewGroupA onTouchEvent:0 I/_tag: Activity onTouchEvent...I/_tag: ViewGroupA onTouchEvent:1 I/_tag: Activity onTouchEvent:1
(ev),如果这里返回false,那么最终会返回执行onTouchEvent方法,由此可知,接下来要调用的就是onTouchEvent方法了。...得onTouchEvent进行处理。...onTouch事件要先于onClick事件执行,onTouch在事件分发方法dispatchTouchEvent中调用,而onClick在事件处理方法onTouchEvent中被调用,onTouchEvent...onTouchEvent 的事件响应逻辑如下: 如果事件传递到当前 View 的 onTouchEvent 方法,而该方法返回了 false,那么这个事件会从当前 View 向上传递,并且都是由上层...View 的 onTouchEvent 来接收,如果传递到上面的 onTouchEvent 也返回 false,这个事件就会“消失”,而且接收不到下一次事件。
领取专属 10元无门槛券
手把手带您无忧上云