Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rameshvoltella/a0d44ba85435a6d2cee85fa4dc8d3d52 to your computer and use it in GitHub Desktop.
Save rameshvoltella/a0d44ba85435a6d2cee85fa4dc8d3d52 to your computer and use it in GitHub Desktop.
A Custom ViewPager for Android with an option to make it swipe to left only, swipe to right only or completely disbale the swipe
import android.content.Context;
import android.support.v4.view.GestureDetectorCompat;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
public class CustomSwipeableViewPager extends ViewPager {
private static final String TAG = "CustomSwipeableViewPager";
private static final float MIN_SWIPE_DISTANCE = 30.0f;
public static enum SwipeType {
DISABLED, TO_LEFT, TO_RIGHT, ENABLED
}
private SwipeType mSwipeType;
private GestureDetectorCompat mGestureDetector;
public CustomViewPager(Context context) {
super(context);
myInitViewPager();
}
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
myInitViewPager();
}
private void myInitViewPager() {
mSwipeType = SwipeType.ENABLED;
mGestureDetector = new GestureDetectorCompat(getContext(), simpleOnGestureListener);
mGestureDetector.setIsLongpressEnabled(true);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (mSwipeType) {
case DISABLED:
return false;
case ENABLED:
return super.onTouchEvent(event);
default:
return mGestureDetector.onTouchEvent(event) && super.onTouchEvent(event);
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
switch (mSwipeType) {
case DISABLED:
return false;
default:
return super.onInterceptTouchEvent(event);
}
}
public void setSwipeType(SwipeType swipeType) {
mSwipeType = swipeType;
}
private GestureDetector.SimpleOnGestureListener simpleOnGestureListener = new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
return true;
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
return true;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return true;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
final float diffX = e2.getX() - e1.getX();
if (Math.abs(diffX) < MIN_SWIPE_DISTANCE) {
return true;
}
if (diffX > 0) {
// Swipe to Left
return SwipeType.TO_LEFT == mSwipeType;
} else {
// Swipe to Right
return SwipeType.TO_RIGHT == mSwipeType;
}
}
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment