您的位置:首页 > 移动开发 > Android开发

Android事件传递机制(零)

2013-07-30 14:50 169 查看
MainActivity如下:

package com.cn;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
/**
* Demo描述:
* http://blog.csdn.net/lfdfhl/article/details/8921438 * 在此基础上继续学习和认识Android事件传递机制
* 认识事件传递的详细过程
*
* Demo构成:
* 一个普通的Activity,自定义Button.
* 在自定义Button中覆写dispatchTouchEvent和onTouchEvent
* 其返回值均为默认值,所以均为true.
* 在Activity中为自定义Button注册TouchListener.并且覆写
* 该Activity的dispatchTouchEvent和onTouchEvent.
* 因为自定义Button的onTouchEvent默认返回为true.
* 表示事件已经消耗,不会继续传递,所以Activity中的
* onTouchEvent方法不会调用
*
*
* 即Touch事件的处理顺序为:
* 1 Activity的dispatchTouchEvent()方法
* 2 自定义Button的dispatchTouchEvent()方法
* 3 Activity中自定义Button的TouchListener执行
* 4 自定义Button的onTouchEvent()方法
*
* 若把1中的现在的返回值取反,那么2,3,4不会执行
* 同理,若把2中的现在的返回值取反,那么后续的3,4不会执行
* 同理,若把3中的现在的返回值取反,那么后续的4不会执行
*
* 常量对应:
* down--->0
* up----->1
* move--->2
*
*/
public class MainActivity extends Activity {
private EventButton mEventButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init(){
mEventButton=(EventButton) findViewById(R.id.button);
mEventButton.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
System.out.println("---> MainActivity中EventButton的OnTouchListener  "+event.getAction());
return false;
}
});

}

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
System.out.println("---> MainActivity dispatchTouchEvent "+ev.getAction()+"  , it defaulst is true");
return super.dispatchTouchEvent(ev);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
System.out.println("---> MainActivity onTouchEvent "+event.getAction()+"  , it defaulst is false");
return super.onTouchEvent(event);
}

}


EventButton如下:

package com.cn;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Button;

public class EventButton extends Button {
public EventButton(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
System.out.println("---> EventButton dispatchTouchEvent , it defaulst is true");
return super.dispatchTouchEvent(event);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
System.out.println("---> EventButton onTouchEvent  , it defaulst is true");
return super.onTouchEvent(event);
}
}


main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<com.cn.EventButton
android:id="@+id/button"
android:layout_width="250dip"
android:layout_height="250dip"
android:layout_centerInParent="true"
android:text="Touch me"
/>

</RelativeLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: