美文网首页
android事件处理学习笔记

android事件处理学习笔记

作者: juanxincai | 来源:发表于2016-06-25 00:36 被阅读0次

    基于监听的事件处理

    1. 监听处理模型:
    • Event Sourse(事件源)
    • Event(事件):用户的一次操作会封装在事件中,一般通过Event对象获得界面组建的事件信息
    • Event Listener: 监听事件源发生的事件并对其作出响应
    1. 委派式事件处理方式: 每个组件可为特定事件指定一个事件监听器,每个事件监听器可以监听一个或者多个事件源。
    2. 基于监听的事件处理模型编程步骤:
    3. 获取事件源即监听对象
    4. 将事件监听器绑定至事件源上(可以使用匿名内部类)
    5. 实现事件处理器

    事件和事件监听器

    参见实例

    • 内部类形式:将事件监听器设置为当前类的内部类
    • 外部类形式:将事件监听器设置为当前类的外部类
    • 匿名内部类:。。。(推荐)
    • Activity本身实现监听器接口并实现事件处理
    • 绑定标签:onClick属性(常用)

    基于回调的事件处理

    1. 回调机制与监听机制


      ** 包含的方法 **
    boolean onKeyDown(int keyCode, KeyEvent Event):用户按下某个按键时触动该方法
    boolean onKeyLongPress(int keyCode,KeyEvent event):
    boolean onKeyShortCut(int keyCode, KeyEvent event):当一个键盘快捷键事件发生调用此方法
    boolean onKeyUp(...):当用户松开某个组件调用该方法
    boolean onTouchEvent(MotionEvent event): 用户触发触摸屏事件调用
    boolean onTrackballEvent(MotionEvent event):触发轨迹球事件调用
    
    
    1. ** 示例 ** :
     public class MyButton extends Button{
       public MyButton(Context Context, AttributeSet set){
         super(context, set);
       }
    
       @Override
       public boolean onKeyDown(int keyCode, KeyEvent event){
         super.onKeyDown(keyCode,KeyEvent);
         Log.v("-crazyit.org-","the onKeyDown is in my button");
         return true;//返回true,表明事件不会向外扩散;
       }
     }
    
    
    1. 基于监听与基于回调的处理模型的区别:
      <pre> 事件源与事件监听器是分离的,当事件源上发生特定的事件时交给事件监听器处理;对于基于回调的事件处理模型,事件源与监听器是统一的,当事件源发生特定事件时该事件还是由事件源本身负责处理

    基于回调的事件的传播

    • 关于回调事件方法中的boolean返回值,其用于标示该处理方法能否完全处理该事件,返回true表示可以并不会传播出去,返回false则相反,该事件会传播出去
    • 若该事件可以传播到该Activity,则该组件所发生的事件不仅会激发该组件的回调方法也会激发该Activity上的回调方法

    重写onTouchEvent方法响应触摸屏事件

    实例** 通过回调实现跟随手指的小球 ** :

    public class DrawView extends View{
      public float currentX = 40;
      public float currentY = 50;
    
      //定义,创建画笔
    
      Paint p = new Paint();
    
      public DrawView(Context context,AttributeSet set){
        super(context, set);
      }
      //重写onDraw()方法
      @Override
      public void onDraw(Canvas canvas){
        super.onDraw(canvas);
        p.setColor(Color.RED);
        canvas.drawCircle(currentX, currentY, 15, p);
      }
      //创建onTouchEvent()
      public boolean onTouchEvent(MotionEvent event){
        //设置当前组件的currentX与currentY属性
        this.currentX = event.getX();
        this.currentY = event.getY();
        //通知组件重绘
        this.invalidate();
        //返回true表明处理方法以经处理完该事件
        return true;
      }
    
    }
    

    ** xml清单: **

    <LinearLayout>
      <com.juanxincai.test.DrawView
        android:orientation:xxx
        android:layout_width:xxx
        android:layout_height:xxx/>
    </LinearLayout>
    

    响应系统设置事件

    Configuration类简介

    程序可调用Aactivity的如下方法获得Cconfiguration类对象:
    <pre> Configuration cfg = getResourses().getConfiguration();</pre>
    该类用于描述手机设备配置信息,具体方法参考
    Configureration简介(自备梯子)

    相关文章

      网友评论

          本文标题:android事件处理学习笔记

          本文链接:https://www.haomeiwen.com/subject/rdfadttx.html