我有两个自定义视图Child(相对布局)和Parent(FrameLayout)。当发生单击事件时,我希望子视图处理该事件,但仍然将其传递给Parent,并且对于Child中的任何其他事件,只需继续传递而不处理。
子视图设置为match_parent。
目前为止我有:
public class Child extends RelativeLayout implements View.OnTouchListener {
private class GestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// process the event
return true;
}
}
public boolean onTouch(View view, MotionEvent motionEvent) {
return true;
}
@Override
public boolean dispatchTouchEvent(MotionEvent e) {
gestrDetect_.onTouchEvent(e);
return super.dispatchTouchEvent(e);
}
}
public class Parent extends FrameLayout {
public Parent(Context context, AttributeSet attrs) {
super(context, attrs);
setOnTouchListener(this);
}
@Override
public boolean onTouch(View view, MotionEvent event) {
return gestrDetect_.onTouchEvent(event);
}
}
虽然我能够在子视图中获取单击事件,但其他事件(如快速滑动或缩放)都无法传递到父级。在保留某些事件传递给父级的情况下,应该如何处理子视图中的某一特定事件子集?
编辑
我已将代码更改为以下内容:
public class Child extends RelativeLayout implements View.OnTouchListener {
private class GestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onFling(android.view.MotionEvent e1, android.view.MotionEvent e2, float velocityX, float velocityY) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// process the event
return true;
}
}
public boolean onTouch(View view, MotionEvent motionEvent) {
return gestrDetect_.onTouchEvent(e);
}
@Override
public boolean dispatchTouchEvent(MotionEvent e) {
return super.dispatchTouchEvent(e);
}
}
public class Parent extends FrameLayout {
@Override
public boolean onTouch(View view, MotionEvent event) {
return gestrDetect_.onTouchEvent(event);
}
}
目前事件仍未传递给父级组件。当我更改
@Override
public boolean onDown(MotionEvent e) {
return true;
}
为了
return false;
我在子组件中没有收到singleTapUp事件。