My app
schows a ListView
. When swiping right or left the ListView
for a the next or previous day should be loaded.
My solution
I tried to use the onFling()
methode to detect a left or right swipe. It works fine if I swipe on the TextView
above the ListView
.
My problem
Swiping on the ListView
doesn't trigger the onFling()
methode. Probably because my ListView
is scrollable. Any ideas on how to solve this?
OnFling()
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 100;
GestureDetector gestureDetector;
@Override
public boolean onTouchEvent(MotionEvent event) {
gestureDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
boolean result = false;
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) {
Toast.makeText(this, "Right to Left swipe", Toast.LENGTH_SHORT).show();
result = true;
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
//left to right swipe
Toast.makeText(this, "Left to Right swipe", Toast.LENGTH_SHORT).show();
result = true;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
This solved my problem:
gestureListener = new View.OnTouchListener(){
public boolean onTouch(View v, MotionEvent event){
return gestureDetector.onTouchEvent(event);
}
};
lv.setOnTouchListener(gestureListener);