android事件传递

来源:互联网 发布:科比单场81分数据 编辑:程序博客网 时间:2024/05/24 02:37


创建layout1继承relabiveLayout:

public class Layout1 extends RelativeLayout{private final String logTag="Layout1";public Layout1(Context context, AttributeSet attrs) {super(context, attrs);}@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {Log.d(logTag, ev.getAction()+"onInterceptTouchEvent");return super.onInterceptTouchEvent(ev);}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {Log.d(logTag, ev.getAction()+"dispatchTouchEvent");return super.dispatchTouchEvent(ev);}@Overridepublic boolean onTouchEvent(MotionEvent event) {Log.d(logTag, event.getAction()+"onTouchEvent");return super.onTouchEvent(event);}}

创建layout2继承relabiveLayout:

public class Layout2 extends RelativeLayout{private final String logTag="Layout2";public Layout2(Context context, AttributeSet attrs) {super(context, attrs);}@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {Log.d(logTag, ev.getAction()+"onInterceptTouchEvent");return super.onInterceptTouchEvent(ev);}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {Log.d(logTag, ev.getAction()+"dispatchTouchEvent");return super.dispatchTouchEvent(ev);}@Overridepublic boolean onTouchEvent(MotionEvent event) {Log.d(logTag, event.getAction()+"onTouchEvent");return super.onTouchEvent(event);}}

创建view1继承view:

public class view1 extends View{private final String logTag="view1";public view1(Context context, AttributeSet attrs) {super(context, attrs);}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {Log.d(logTag, ev.getAction()+"dispatchTouchEvent");return super.dispatchTouchEvent(ev);}@Overridepublic boolean onTouchEvent(MotionEvent event) {Log.d(logTag, event.getAction()+"onTouchEvent");return super.onTouchEvent(event);}}

布局xml

<com.example.and_test.Layout1             android:layout_width="400dp"            android:layout_height="400dp"            android:background="#0f0">            <com.example.and_test.Layout2                 android:id="@+id/layout2"                android:layout_width="200dp"                android:layout_height="200dp"                android:background="#ff0">                <com.example.and_test.view1                     android:layout_width="100dp"                    android:layout_height="100dp"                    android:background="#0ff"/>            </com.example.and_test.Layout2>        </com.example.and_test.Layout1>
页面效果:


控制台输出


为layout2添加touchlistener

findViewById(R.id.layout2).setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {Log.d("layout2", event.getAction()+"onTouch");return false;}});



ontouch返回true



加入onclick事件

findViewById(R.id.layout2).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubLog.d("layout2", "onClick");}});

ontouch return true ,onclick 没有执行



将ontouch return false 结果如下





0 0
原创粉丝点击