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为手机屏幕触摸事件封装类的对象,其中封装了该事件的所有信息,例如触摸的位置、触摸的类型及触摸的事件等。该对象会在用户触摸手机屏幕时被创建。

  • 相关阅读:
    Delphi XE5 android 蓝牙通讯传输
    Delphi XE5 android toast
    Delphi XE5 android openurl(转)
    Delphi XE5 如何设计并使用FireMonkeyStyle(转)
    Delphi XE5 android 捕获几个事件
    Delphi XE5 android listview
    Delphi XE5 android 黑屏的临时解决办法
    Delphi XE5 android popumenu
    Delphi XE5 android 获取网络状态
    Delphi XE5 android 获取电池电量
  • 原文地址:https://www.cnblogs.com/chhom/p/6529068.html
Copyright © 2011-2022 走看看