Swipe, onFling, MotionEvent e1 is null

Закрыто
ArseniySafin
Сообщения: 22
Зарегистрирован: 26 ноя 2013, 22:12

Swipe, onFling, MotionEvent e1 is null

Сообщение ArseniySafin » 22 июн 2014, 13:11

Дела обстоят следующим образом:

Есть 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;
    }
}
}
Проблема в том, что как только я сдвигаю вниз ListView в onFling приходит нулевой e1 и выдаёт на строчке "float distanceX = e2.getX() - e1.getX();" NPE.
Убил уже очень много времени, нарыл пару-тройку десяток ссылок на такой же вопрос, но не нашёл подходящего ответа.

Буду очень признателен, если кто скажет что тут не так.

Закрыто