Swipe, onFling, MotionEvent e1 is null
Добавлено: 22 июн 2014, 13:11
Дела обстоят следующим образом:
Есть ListView, нужно обработать swipe на нём, делаю это так:
Проблема в том, что как только я сдвигаю вниз ListView в onFling приходит нулевой e1 и выдаёт на строчке "float distanceX = e2.getX() - e1.getX();" NPE.
Убил уже очень много времени, нарыл пару-тройку десяток ссылок на такой же вопрос, но не нашёл подходящего ответа.
Буду очень признателен, если кто скажет что тут не так.
Есть ListView, нужно обработать swipe на нём, делаю это так:
Код: Выделить всё
((ListView)findViewById(R.id.lv)).setOnTouchListener(new OnSwipeTouchListener(this) {
@Override
public void onSwipeRight() {
LinearLayout fr = (LinearLayout)findViewById(R.id.content_frame);
mDrawerLayout.openDrawer(fr);
}
});Код: Выделить всё
public class OnSwipeTouchListener implements OnTouchListener {
private final GestureDetector gestureDetector;
public OnSwipeTouchListener(Context customAdapter) {
gestureDetector = new GestureDetector(customAdapter, new GestureListener());
}
public void onSwipeLeft() {
}
public void onSwipeRight() {
}
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
private final class GestureListener extends SimpleOnGestureListener {
private static final int SWIPE_DISTANCE_THRESHOLD = 100;
private static final int SWIPE_VELOCITY_THRESHOLD = 100;
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Log.d("score", e2 + " " + e1);
float distanceX = e2.getX() - e1.getX();
float distanceY = e2.getY() - e1.getY();
if (Math.abs(distanceX) > Math.abs(distanceY) && Math.abs(distanceX) > SWIPE_DISTANCE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
if (distanceX > 0)
onSwipeRight();
else
onSwipeLeft();
return true;
}
return false;
}
}
}Убил уже очень много времени, нарыл пару-тройку десяток ссылок на такой же вопрос, но не нашёл подходящего ответа.
Буду очень признателен, если кто скажет что тут не так.