У меня есть видоискатель, который включает в себя несколько макетов. Каждый макет имеет вид прокрутки в качестве корня.
Под видоискателем у меня есть горизонтальная прокрутка, которая содержит текстовые представления, которые действуют как панель навигации.
Моя первоначальная проблема заключалась в том, что сбрасывание перестало работать, как только я добавил вид прокрутки, но добавил следующий код:
@Override
public boolean dispatchTouchEvent(MotionEvent ev){
super.dispatchTouchEvent(ev);
return gestureDetector.onTouchEvent(ev);
}
И прокрутка теперь работает вместе с броском.
Единственная проблема, с которой я столкнулся сейчас, заключается в том, что навигационная панель HSV теперь работает немного странно. Иногда, когда я пытаюсь переместить его, чтобы выбрать новое содержимое, HSV возвращается туда, где он был. В другой раз HSV думает, что я хочу бросить и переходит к следующему содержанию. Это, конечно, зависит от скорости, которую я пытаюсь прокрутить.
Я хочу, чтобы навигационная панель работала независимо от плавника.
Я пытаюсь понять код, чтобы исправить это сам, но никуда не денусь.
В моем onCreate есть следующее:
gestureDetector = new GestureDetector(new MyGestureDetector());
gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}};
У меня есть класс MyGestureDetector:
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
flipper.setInAnimation(flip_in_from_right);
flipper.setOutAnimation(flip_out_to_left);
flipper.showNext();
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
flipper.setInAnimation(flip_in_from_left);
flipper.setOutAnimation(flip_out_to_right);
flipper.showPrevious();
}
} catch (Exception e) {
// nothing
}
А затем переопределить:
@Override
public boolean dispatchTouchEvent(MotionEvent ev){
super.dispatchTouchEvent(ev);
return gestureDetector.onTouchEvent(ev);
}
Кто-нибудь может пролить свет на это?