创建layout1继承relabiveLayout:
public class Layout1 extends RelativeLayout{
private final String logTag="Layout1";
public Layout1(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
Log.d(logTag, ev.getAction()+"onInterceptTouchEvent");
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
Log.d(logTag, ev.getAction()+"dispatchTouchEvent");
return super.dispatchTouchEvent(ev);
}
@Override
public 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);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
Log.d(logTag, ev.getAction()+"onInterceptTouchEvent");
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
Log.d(logTag, ev.getAction()+"dispatchTouchEvent");
return super.dispatchTouchEvent(ev);
}
@Override
public 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);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
Log.d(logTag, ev.getAction()+"dispatchTouchEvent");
return super.dispatchTouchEvent(ev);
}
@Override
public 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() {
@Override
public 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() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Log.d("layout2", "onClick");
}
});
ontouch return true ,onclick 没有执行
将ontouch return false 结果如下