I\'m using the following code to detect swipe in my Activity:
getWindow().getDecorView().getRootView().setOnTouchListener(new OnTouchListener() {
mSlop = ViewConfiguration.get(getActivity()).getScaledTouchSlop();
boolean mIsSwiping = false;
public boolean onTouch(View v, MotionEvent event) {
//Timber.d("onTouch, v.getId %d, event.getActionMasked %d", v.getId(), event.getActionMasked());
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
mDownX = event.getX();
mDownY = event.getY();
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
mIsSwiping = false;
break;
case MotionEvent.ACTION_MOVE:
float deltaX = event.getX() - mDownX;
float deltaY = event.getY() - mDownY;
if (!mIsSwiping && Math.abs(deltaX) > mSlop && Math.abs(deltaY) < mSlop) {
mIsSwiping = true;
if (deltaX > 0) {
Timber.d("swipe from left to right, slop %d", mSlop);
// TODO:
} else {
Timber.d("swipe from right to left");
// TODO:
}
return true;
} else if (!mIsSwiping && Math.abs(deltaY) > mSlop) {
mIsSwiping = true;
Timber.d("swipe vertical");
return true;
}
}
return false;
}
You must set OntouchListener to ScrollView.
ScrollView scrollView = (ScrollView)findViewById(R.id.scrollView1);
scrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:{
downX = event.getX();}
case MotionEvent.ACTION_UP:{
upX = event.getX();
float deltaX = downX - upX;
if(Math.abs(deltaX)>0){
if(deltaX>=0){
swipeToRight();
return true;
}else{
swipeToLeft();
return true;
}
}
}
}
return false;
}
});
I think this is what you are looking for:
Swipe event in android ScrollView