Android事件传递机制(一)deprecated

来源:互联网 发布:淘宝号子账号怎么认证 编辑:程序博客网 时间:2024/04/29 08:01

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>

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描述: * 测试Touch事件的传递,代码结构如下: * 1 定义一个Button 重写onTouchEvent()方法 * 2 在Activity中为该Button设置OnTouchListener * 3 重写Activity的onTouchEvent() * 注意: * 在以上的三步的结尾处均返回false,表示未处理完事件继续传播 *  * 运行测试结果,输出的顺序为: * 1 EventButton OnTouchListener in MainActivity * 2 EventButton onTouchEvent * 3 MainActivity onTouchEvent *  * 即Touch事件的处理顺序为: * 1 自定义button的listener * 2 自定义button的onTouchEvent()方法 * 3 Activity的onTouchEvent() * 所以,按照这个处理顺序只要在对于的方法结尾处返回true. * 那么对于该事件的处理就不会继续传递下去. *  */public class MainActivity extends Activity {private EventButton mEventButton;@Overrideprotected 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() {@Overridepublic boolean onTouch(View v, MotionEvent event) {System.out.println("---> EventButton OnTouchListener in MainActivity ");return false;}});      }    @Override    public boolean onTouchEvent(MotionEvent event) {    super.onTouchEvent(event);    System.out.println("---> MainActivity onTouchEvent");    return false;    }        }

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);}@Overridepublic boolean onTouchEvent(MotionEvent event) {super.onTouchEvent(event);System.out.println("---> EventButton onTouchEvent");return false;}   }




 

原创粉丝点击