我有一個自定義視圖,其中有觸摸事件(滑動等)的功能。現在可能會發生,這個自定義視圖在ScrollableLayout
中使用。問題在於,當用戶在我的自定義視圖中滑動時,父級(ScrollableLayout)也將處理滑動手勢,因此它會滾動,但不應該。如何防止TouchEvent滾動
我需要類似於JavaScript的event.preventDefaults()
。
我覆蓋View#onTouchEvent
並始終返回true
。 我想,當我從onTouchEvent
返回true時,這意味着事件被消耗,沒有其他視圖會獲得onTouchEvent,但這是錯誤的。
任何人都可以幫助我嗎?
我的看法是很容易的對它進行測試:
public class PreventingTouchEventView extends View {
public PreventingTouchEventView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.RED);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(200, 200);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return true;
}
}
我推一個例子Android項目到GitHub上: https://github.com/jjoe64/android-preventing-touch-test
如果觸摸和紅色帆布內滾動時,ScrollableLayout應該不滾動。
在這裏相同。這些更改屬於父視圖。我只能改變我自己的自定義視圖... – appsthatmatter
即使我可以對父級進行更改,也會完全禁用滾動。當我觸摸我的自定義視圖時,它只應該不滾動。 – appsthatmatter
你爲什麼說這個改變屬於父視圖?您只將「OnTouchListener」設置爲您的自定義視圖,因此如果您觸摸視圖外部 - 另一個視圖應該處理此事件,對於您的情況它是「ScrollableLayour」(您的自定義視圖的父級)。 – Desert