Android studio事件处理机制

Android studio事件处理机制

一.基于监听机制的事件处理机制

  1. 监听的三要素:
    Event Source 事件源
    Event 事件
    Event Listener 事件监听器

    2.实现监听事件的方法
    通过内部类实现
    通过匿名内部类实现
    通过事件源所在类实现

    3.监听事件实现的方法
    (1)用内部类来实现

bt.setOnClickListener(new Ok());
}
class Ok implements  View.OnClickListener{
    @Override
    public void onClick(View v) {
        
    }

(2)用匿名内部类来实现

主体类 implements View.onClickListener{
重写监听方法
public void onClick(View v) {

}

}
(4)通过外部类实现
主类
事件源.setOnclickListener(new 外部类名(this.当前Activity)

外部类 implements View.OnClickListener{
Private Activity mActivity;
public 外部类名(Activity activity){
this.mactivity=activity;
}
public void onClick(View v) {

}

}
(5)通过布局来间接实现

<Button
android:OnClick=”要实现的方法名(show)”;
></Button>

//然后在Activity里 写一个与布局中OnClick一样名字的方法
当按下按钮时会执行该方法

public void show(View v){
 //当按下按钮时会实现该方法
}

注意:给同一事件源添加多个同种类型的监听器,系统只会实现最后添加的事件监听器
我理解,有可能是将之前先注册的事件监听,被后面的覆盖了。

二.基于回调事件的处理机制

  1. 回调机制与监听机制的区别
    测试回调机制与监听机制的区别:
    创建一个Activity :
public class DataMoveActivity extends AppCompatActivity {
    Button bt;
    MyButton btt;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_move_data);
        bt=(Mybutton)findViewById(R.id.huidiao);
        btt.setOnTouchListener(new View.OnTouchListener(){  //
                                   @Override
                                   public boolean onTouch(View v, MotionEvent event) {
				Switch(event.getAction()){
				case MotionEvent.ACTION_DOWN: 
				Log.d(“监听机制”,“onTouch”);
				break;
}
                                       return false;
                                   }
                               }
        );
	
	
	}
	@Override
	//在Activity重写该方法用于测试
	public boolean onTouchEvent(MotionEvent event) {  //
				Switch(event.getAction()){
				case MotionEvent.ACTION_DOWN: 
				Log.d(“Activity”,“--onTouchEvent--”);
				break;
}
                                       return false;
                                   }
                               }

    }

创建一Mybutton 继承AppcompatButton
自己创建一个按钮回调机制

public class MyButton extends AppCompatButton {
    public MyButton(Context mcontext){
        super(mcontext);
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {  //重写Touch,里面有多种处理参数
        switch (event.getAction()){//监听按钮所做事的参数,返回到这里
            case MotionEvent.ACTION_DOWN: //按下按钮时所要做的事
	log.d(“Mybutton”,”--onTouch---”);       
 }
        return false;  //表示该事件处理了,但是继续向外传播
                        //当返回值为true ,表示该事件处理了,该事件到此为止处理完了
    }
}

当按下按钮发现监听机制会优先出现在日志中
说明监听机制会优先注册

  1. 基于回调的事件传播

    关于return false/true;
    return false; //表示该事件处理了,还是继续向外传播
    当retuen true;//表示该事件处理了,该事件就到此结束
    若后面还出现onTouch()重写方法,将不会在运行

    比如:回到上面代码
    

    1.在Mybutton类的onTouch 设置返回true
    在Activity 重写的onTouch方没日志
    监听机制的的重写onTouch有日志

    2.对监听机制的onTouch 设置return true
    MyButton类中重写onTouchEvent没有日志
    说明监听机制优先于回调机制

    MotionEvent 手势事件参数
    ACTION_DOWN 手指按下的操作
    ACTION_MOVE 手指滑动
    ACTION_UP 手指离开屏幕的动作
    还等等参数

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值