[英]Dispatching ViewPager touch events to underlying view
我有一個有2頁的ViewPager。 在其中的一個上,有一個自定義視圖以及其他一些小部件。 我想要的是如果該自定義視圖使用了觸摸事件,則禁用分頁。
這是我自定義視圖中的相關代碼:
class OscilloscopeView extends View implements GestureDetector.OnGestureListener {
OscilloscopeView(Context context){
mGestureDetector = new GestureDetectorCompat(context, this);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event) || mGestureDetector.onTouchEvent(event);
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
return super.dispatchTouchEvent(event) || mGestureDetector.onTouchEvent(event);
}
@Override
public boolean onDown(MotionEvent motionEvent) {
Log.d("MDETECTOR", "onDown: " + motionEvent.toString());
return true;
}
@Override
public void onShowPress(MotionEvent motionEvent) {
}
@Override
public boolean onSingleTapUp(MotionEvent motionEvent) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
int dHPos = (int) (distanceX / mWidth * points.length / 2);
if (Utilities.around(hPosition - dHPos, 0, points.length / 4))
hPosition -= dHPos;
triggerLevel += (2 * distanceY / mHeight * max);
invalidate();
return true;
}
@Override
public void onLongPress(MotionEvent motionEvent) {
hPosition = 0;
triggerLevel = 0;
}
@Override
public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent2, float v, float v2) {
Log.d("MDETECTOR", "onFling: " + motionEvent.toString());
return true;
}
}
ViewPager是正常的,沒有方法被覆蓋。 因此,我必須重寫哪些方法,以及如何在滾動事件位於視圖區域內的情況下將該事件不再傳遞給ViewPager,而如果在視圖外部滑動,則ViewPager可以正常工作。 我猜我不應該在某些方法上調用super,但是我不確定。
@Override
public boolean onTouchEvent(MotionEvent event) {
ViewParent parent = getParent();
parent.requestDisallowInterceptTouchEvent(true);
return super.onTouchEvent(event) || mGestureDetector.onTouchEvent(event);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.