Android面试-View事件体系

原创 2018年04月17日 15:36:32

View的事件分发

public static dispatchTouchEvent(MotionEvent e){
    boolean consume = false;
    if(onInterceptTouchEvent(e)) {
        consume = onTouchEvent(e);
    } else {
        Consume = child.dispatchTouchEvent(e);    
    }
    return consume;
}
  • dispatchTouchEvent:是否消耗该事件。由当前View的onTouchEvent和下级View的dispatchTouchEvent共同决定
  • onInterceptTouchEvent:是否拦截该事件。外部拦截法便是通过重写父容器的onInterceptTouchEvent,返回true拦截事件。被拦截后,同一个事件序列中这个View的onInterceptTouchEvent不会再被调用
  • onTouchEvent:处理事件并返回是否消耗。处理事件优先级onTouch > onTouchEvent > onClick。若View不消耗ACTION_DOWN事件,即返回false,则同一事件序列的其他事件如UP,MOVE等重新交给父容器的onTouchEvent处理。

View的滑动

  • 使用ScrollerTo/by:只能改变View内容位置,无法改变View在布局中的位置
  • 使用动画:View动画只是操作影像,属性动画则可以真正改变布局位置属性,可以应对需要处理交互的场景。
  • 改变LayoutParams:比如设置marginLeft等,实现较麻烦但也可以满足需要交互的场景。

View的弹性滑动

  • Scroller:View在onDraw方法中调用computeScroller(我们在里面实现弹性滑动代码),它会通过Scroller对象获取当前的ScrollX、ScrollY,通过时间流逝计算新的滑动距离,和是否滑动停止,若还未停止,在通过scrollTo实现滑动,调用postInvalidate进行第二次重绘,如此反复。
  • 使用动画:属性动画ValueAnimator
  • 使用延时策略:通过Scrollto+Handler,或View的postDelayed

滑动冲突解决

  • 外部拦截法:重写父容器的onInterceptTouchEvent方法,写入拦截逻辑,注意ACTION_DOWN和ACTION_UP都要返回false,拦截应该在ACTION_MOVE中设置。
  • 内部拦截法:子容器需要事件则消耗,不交给父容器处理。步骤如下:
首先,重写子元素的dispatchTouchEvent
ACTION_DOWN: parent.requestDisallowInterceptionTouchEvent(false)
return super.dispatchTouchEvent(e);
其次,修改父容器的onInterceptTouchEvent
ACTION_DOWN: return false;
else return true;


Android面试题(三)——View的事件体系和工作原理

引言View在Android的地位堪比四大组件,Android为我们提供了很多的系统控件。但是为了区别一般性,我们往往需要自定义View,这就要求我们对View的事件体系和工作原理有深入的理解,只有这...
  • a471893438
  • a471893438
  • 2016-08-01 13:44:40
  • 1425

彻底理解View事件体系!

View的事件体系整体上理解还是比较简单的,但是却有很多细节。这些细节很容易忘记,本文的目标是理解性的记忆,争取做到看完不忘。最近在复习,希望本文能对你也有所帮助。如果你已经对View事件体系有一定的...
  • huachao1001
  • huachao1001
  • 2016-06-27 14:18:02
  • 4358

Android-View的事件体系

一、View基础知识 1、什么是View: View是一种界面层的控件的一种抽象,它代表了一个控件。 ViewGroup为控件组。 View中也可以包含多个控件,形成控件树。 ...
  • shandian000
  • shandian000
  • 2017-01-17 17:00:39
  • 214

安卓学习笔记之View的事件体系

view事件体系
  • qq_28261343
  • qq_28261343
  • 2016-08-23 10:11:33
  • 572

《Android开发艺术探索》——View的事件体系

一、view基础知识 什么是View (1)View是Android中所有控件的基类,不管是简单的Button和TextView还是复杂的RelativeLayout和ListView,它们的共同基类...
  • ilsla
  • ilsla
  • 2016-03-07 15:08:45
  • 808

View的事件体系

一、View基础知识 1、什么是View: View是一种界面层的控件的一种抽象,它代表了一个控件。 ViewGroup为控件组。 View中也可以包含多个控件,形成控件树。 ImageB...
  • zizidemenghanxiao
  • zizidemenghanxiao
  • 2015-12-05 11:11:08
  • 2073

Android艺术开发探索第三章——View的事件体系(上)

Android艺术开发探索第三章————View的事件体系(上) 我们继续来看这本书,因为有点长,所以又分了上下,你在本片中将学习到View基础知识 什么是View View的位置参数 Moti...
  • qq_26787115
  • qq_26787115
  • 2016-10-31 11:01:52
  • 2598

Android 源码分析AccessibilityService拦截VR眼镜Key事件以及key事件在View体系的传递

上一篇《Android AccessibilityService拦截不到VR眼镜BACK键分析》我们拦截VR返回键出现了问题,这一篇我们从源码中进行分析。 《Android 源码分析鼠标事件传递》介绍...
  • jasonwang18
  • jasonwang18
  • 2017-02-27 16:25:38
  • 405

android View的事件体系

View的事件体系 View的基础知识 Android中所有控件的基类。 View的位置主要由它的四个顶点来决定的,分别对应View的四个属性:left:左上角横坐标,top:左上角纵坐标,ri...
  • u013068440
  • u013068440
  • 2015-12-25 22:03:12
  • 844
收藏助手
不良信息举报
您举报文章:Android面试-View事件体系
举报原因:
原因补充:

(最多只允许输入30个字)