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.}  


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值