Android中的事件机制
来源:互联网 发布:北京网络空间安全协会 编辑:程序博客网 时间:2024/05/17 08:13
一、概述
android中的事件机制,其实既包括三方面:事件、事件源、事件处理。
1、事件
(1) 事件是怎么被传递的? (2)事件是怎么被消费的? (3)消费以后怎么持续关注后续事件的?
2、事件源
界面的控件是事件的来源。
3、事件处理
事件处理在android里面有两种方式,第一种是基于监听的事件处理;另一种是基于回调的事件处理。
二、事件
1、事件发生后,首先得到事件的是Activity,然后由外而内,传递给容器,最后传递给控件。
2、而后是由内而外层层处理事件,首先是控件本身处理:先用监听器处理,在用回调方法处理;其次是外围容器:也是先监听器
处理,在用回调方法处理;最后在用Activity中的回调方法处理
3、如果监听器的回调方法里面或者控件本身的回调方法里面的返回值是false,上述2将得到完整的执行;如果返回值是true,那么
就在此方法打断,事件不会在往外传递了。而事件的后续事件由谁来处理呢??现在不知道呢。
比如:
package com.example.onkeydown;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyLinear linear = new MyLinear(this);
MyButton btn = new MyButton(this);
btn.setText("按钮");
linear.addView(btn);
linear.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
System.out.println("MyLinear.Listener===onTouchEvent");
return false;
}
});
btn.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
System.out.println("MyButton.Listener===onTouchEvent");
return false;
}
});
setContentView(linear, new FrameLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}
@Override
public boolean onTouchEvent(MotionEvent event) {
System.out.println("Activity===onTouchEvent");
return super.onTouchEvent(event);
}
}
class MyButton extends Button {
public MyButton(Context context) {
super(context);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
System.out.println("Button===onTouchEvent");
return true;
}
}
class MyLinear extends LinearLayout {
public MyLinear(Context context) {
super(context);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
System.out.println("MyLinear===onTouchEvent");
return false;
}
}
- Android中的事件机制
- Android中的事件机制
- Android中的事件处理机制
- android中的事件分发机制
- Android中的事件处理机制
- Android中的事件分发机制
- Android中的事件处理机制
- Android中的事件处理机制
- Android中的事件分发机制
- Android中的事件分发机制
- Android中的事件分发机制
- Android中的事件分发机制
- Android中的View事件传递机制
- 理解Android中的TouchEvent事件分发机制
- Android 中的Touch事件分发机制
- Android中的事件传递和消费机制
- android中的Touch触摸事件传递机制
- android中的事件传递机制(1)
- 【互联网广告】移动互联网广告
- 272 - TEX Quotes
- 程序员是否可以在家办公——在家办公的利与弊
- Windows Touch示例-操作和延时示例
- Windows Touch示例-Windows Touch 笔势示例 (MTGestures)
- Android中的事件机制
- Twisted 之 reactor
- roid-获得".apk"文件的相关信息。包名、版本号等等
- 10683 - The decadary watch
- Windows Touch示例-Windows Touch 操作示例 (MTManipulation)
- 天天记录 - Android View坐标getLeft, getRight, getTop, getBotto
- Windows Touch示例-Windows Touch 便笺簿示例 (MTScratchpadWMTouch)
- windows 8 64位下安装Android sdk manager 出现的问题
- Windows Touch示例-使用实时触笔的 Windows Touch 便笺簿示例 (MTScratchpadRTStylus)