У меня есть пользовательский вид, где у меня есть функциональность с событиями касания (проведите пальцем и т. Д.). Теперь может случиться, что это пользовательское представление используется в пределах ScrollableLayout
. Проблема заключается в том, что когда пользователь просматривает мое пользовательское представление, родительский (ScrollableLayout) также будет обрабатывать жестов салфетки, и поэтому он прокручивается, но он не должен.Как предотвратить TouchEvent от прокрутки
Мне нужно что-то вроде event.preventDefaults()
с JavaScript.
Я переопределяю View#onTouchEvent
и всегда возвращаю true
. Я думал, что когда я вернусь с onTouchEvent
, это означает, что событие уничтожено, и никакое другое представление не получит 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;
}
}
Я нажал андроид проект примера для GitHub: https://github.com/jjoe64/android-preventing-touch-test
Если нажать и прокручивать внутри красного холста, ScrollableLayout должен не свиток.
такой же здесь. Эти изменения относятся к родительскому представлению. Я могу изменить свой собственный пользовательский вид ... – appsthatmatter
Даже если бы я мог внести изменения в родительский элемент, это полностью отключит прокрутку. Он не должен прокручиваться, когда я коснусь своего пользовательского представления. – appsthatmatter
Почему вы говорите, что эти изменения относятся к родительскому виду? Вы устанавливаете 'OnTouchListener' только для своего пользовательского представления, и, таким образом, если вы касаетесь внешнего вида - другое представление должно обрабатывать это событие, в вашем случае это' ScrollableLayour' (родительский элемент вашего пользовательского представления). – Desert