我有2个片段,共享屏幕。 在两者中,都有一个正在收听TouchEvents的布局 当我在第一个片段上启动TouchEvent,然后将手指移到第二个片段的顶部时,第一个片段仍然会接收到TouchEvent,而第二个片段仍然没有接收到TouchEvent。 我尝试了不同的选择而没有成功。从活动中处理TouchEvent,然后将其分配给两个片段,这可能是一个解决方案吗? 任何线索都欢迎=)
答案 0 :(得分:3)
private ArrayList<MyOnTouchListener> onTouchListeners = new ArrayList<MusicShaker.MyOnTouchListener>(10);
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
for (MyOnTouchListener listener : onTouchListeners) {
listener.onTouch(ev);
}
return super.dispatchTouchEvent(ev);
}
public void registerMyOnTouchListener(MyOnTouchListener listener){
onTouchListeners.add(listener);
}
public interface MyOnTouchListener {
public void onTouch(MotionEvent ev);
}
Fragment1.java:
((MyActivity)getActivity()).registerMyOnTouchListener(new MyActivity.MyOnTouchListener() {
@Override
public void onTouch(MotionEvent ev) {
Log.d("", "Fragment1 got it");
}
});
Fragment2.java:
((MyActivity)getActivity()).registerMyOnTouchListener(new MyActivity.MyOnTouchListener() {
@Override
public void onTouch(MotionEvent ev) {
Log.d("", "Fragment2 got it");
}
});
它有效,但如果有人有更好的解决方案,我总是在听=)
编辑:小心使用此解决方案,因为MotionEvent x和y将与rawX和rawY相同(不再转换为View的坐标)