zoukankan      html  css  js  c++  java
  • Android 事件分发

    要想充分理解android的分发机制,需要对以下几个知识点有所了解:

    1.View和ViewGroup

    2.事件

    3.View事件的分发机制

    4.ViewGroup事件的分发机制

    一、View和ViewGroup

     Android的UI界面都是由View和ViewGroup及其派生类组合而成,其中,View是所有UI组建的基类,而ViewGroup是容纳这些组件的容器,其本身也是从View派生来的,也就是说ViewGroup的父类就是View。

        通常来说,Button、ImageView、TextView等控件都是继承父类View来实现的,RelativeLayout、LinearLayout、FrameLayout等布局都是集成父类ViewGroup来实现的。

    二、事件

        当手指触摸到View或ViewGroup派生的控件后,将会触发一系列的出发响应时间,如:

        onTouchEvent、onClick、onLongClick等。每个view都有自己处理事件的毁掉方法,开发人员只需重写这些回调方法就可以实现需要的响应事件。

        而事件通常重要的有如下三种:

        MotionEvent.ACTION_DOWN   按下View,是所有事件的开始

        MotionEvent.ACTION_MOVE   滑动事件

        MotionEvent.ACTION_UP    与down对应,表示抬起

        事件的响应原理:

        在android开发设计模式中,最广泛应用就是监听、回调,进而形成了事件响应的过程。

        以Button的onClick为例,

    1、         OnClickListener类是一个当控件被点击后进行回调的一个接口,它完成被点击后的回调通知。

    2、         创建一个按钮Button,并设置监听事件,对这个Button进行setOnClickListener操作

    3、         当手指触摸到Button按钮,通过一系列方法(之后将会详细讲解,这里暂时忽略),触发并执行到onTouchEvent方法并执行mPerformClick方法,在mPerformClick方法中,首先会判断注  册的mOnClickListener是否为空,若不为空,它就会回调之前注册的onClick方法,进而执行用户自定义代码。

    四、View事件的分发机制

        disPatchTouchEvent和onTouchEvent两个函数,这两个函数都是View的函数,要理解View事件的分发机制,只要清楚这两个函数就基本清楚了。

        这里的“分发”是指一个触摸或点击事件的发生,分发给当前触摸控件所监听的事件(如Onclick、onTouch等),进而来决定是控件的那个函数来响应此次事件。

        dispatchTouchEvent:次函数负责尸检的分发,只需记住当触摸一个View控件,首先会调用这个函数就行,在这个函数里决定将事件分发给谁处理。

        onTouchEvent:次函数负责执行事件的处理,主要处理MontionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE和MotionEvent.ACTION_UP 这三个事件。

        public boolean onTouchEvent(MotionEvent event)

        参数event为手机屏幕触摸事件封装类的对象,其中封装了该事件的所有信息,例如触摸的位置、触摸的类型及触摸的事件等。该对象会在用户触摸手机屏幕时被创建。

  • 相关阅读:
    centos7 安装 nginx
    centos 关闭防火墙
    springcloud + nacos + mybatis ,增加seata分布式事务
    docker 运行 seata-server 配置nacos
    分布式事务4种方式,通俗易解篇
    主键字段报错doesn't have a default value (mybatis)
    模拟部署一个前后端分离的项目
    nginx配置接口转发路径
    前端部署后出现白板异常
    nodeJs的升降级(win10下)
  • 原文地址:https://www.cnblogs.com/chhom/p/6529068.html
Copyright © 2011-2022 走看看