zoukankan      html  css  js  c++  java
  • android学习笔记之事件处理机制

        android提供了强大的事件处理机制,包括两套事件处理机制:

    1. 基于监听的事件处理
    2. 基于回调的事件处理

           对于基于监听的事件处理而言,主要做法就是为android界面组件绑定特定的事件监听器。此外,android还允许在界面布局文件中使用android:onClick属性指定事件监听方法,通过这种方式指定事件监听方法时,开发者需要在Activity中定义事件监听方法(该方法必须有一个View类型的参数,代表被单击的UI组件),当用户单击该UI组件时,系统将会激发android:onClick属性所指定的方法。

           对于基于回调的事件处理而言,主要做法就是重写android组件特定的回调方法,或者重写Activity的回调方法。一般来说,基于回调的事件处理方法的代码会显得比较简洁,可用于处理一些具有通用性地事件。

        在事件处理的监听模型中,主要涉及如下三类对象:

    1. Event Source(事件源):事件发生的场所,通常就是各个组件
    2. Event(事件):事件封装了界面组件上发生的特定事情,一般通过Event对象来取得
    3. Event Listener(事件监听器):负责监听事件源所发生的事件,并做出相应的响应

           而对于基于回调的事件事件处理模型来说,事件源和事件监听器是统一的,或者说事件监听器完全消失了。当用户在GUI组件上激发某个事件时,组件自己的特定方法将会负责处理该组件。

           几乎所有的基于回调的事件处理方法都有一个boolean类型的返回值,该返回值若为true,表明该处理方法已完全处理该事件,该事件不会传播出去;若返回值为false,表明该处理方法未完全处理该事件,该事件会传播出去。

           注意:android系统最先触发的是该按键上绑定的事件监听器,接着才触发该组件提供的事件回调方法,然后还会传播到该组件所在的Activity。

         可以看出,基于监听的事件处理模型具有更大的优势:

    1. 基于监听的事件处理模型分工更明确,事件源、事件监听由两个类分别实现,具有更好的可维护性
    2. android事件处理机制保证基于监听的事件监听器优先被触发

           但是在某些情况下,基于回调的事件处理机制会更好地提高程序的内聚性。以之前的跟随手指移动的小球为例,这种形式更好地提高程序的内聚性。在Activity类中不需要再为该View绑定事件监听器,因为该View自己就可以处理触摸屏事件。总的来说,基于回调的事件处理更适合事件处理逻辑比较固定的View。

    01.public class DrawView extends View   
    02.{  
    03.    private float currentX=40;  
    04.    private float currentY=50;  
    05.      //定义并创建画笔  
    06.    Paint p=new Paint();      
    07.    public DrawView(Context context)   
    08.    {  
    09.        super(context);  
    10.    }     
    11.      
    12.    public DrawView(Context context,AttributeSet set)   
    13.    {  
    14.        super(context,set);  
    15.    }  
    16.      
    17.    @Override  
    18.    protected void onDraw(Canvas canvas)  
    19.    {  
    20.          //设置画笔的颜色  
    21.          p.setColor(Color.RED);  
    22.          //绘制圆  
    23.        canvas.drawCircle(currentX,currentY,15,p);  
    24.    }  
    25.      
    26.    @Override  
    27.    public boolean onTouchEvent(MotionEvent event)   
    28.    {  
    29.          //获得(更新)位置坐标  
    30.        this.currentX=event.getX();  
    31.        this.currentY=event.getY();  
    32.        //通知当前组件重绘  
    33.        this.invalidate();  
    34.        return true;  
    35.    }     
    36.}  


     

  • 相关阅读:
    jquery的图片异步加载
    thinkphp3.1的验证码
    android的edittext设置输入限制,只能输入数字
    android,安卓get请求的提交以及我遇到的异常
    android安卓开发基础小笔记,添加按钮事件,打开新窗体,窗体传值,回传
    php正则表达式函数
    php对浮点数小数取整,php除法取整数
    php数组全排列,元素所有组合
    javascript数组全排列,数组元素所有组合
    spring 配置中相关属性的含义:
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3109149.html
Copyright © 2011-2022 走看看