diff options
Diffstat (limited to 'sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/VerticalViewPager.java')
-rw-r--r-- | sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/VerticalViewPager.java | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/VerticalViewPager.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/VerticalViewPager.java new file mode 100644 index 0000000..3d64042 --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/VerticalViewPager.java @@ -0,0 +1,67 @@ +package com.davemorrissey.labs.subscaleview.test.viewpager; + +import android.content.Context; +import android.support.v4.view.ViewPager; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; + +/** + * From http://stackoverflow.com/a/22797619/2719186 + */ +public class VerticalViewPager extends ViewPager { + + public VerticalViewPager(Context context) { + super(context); + init(); + } + + public VerticalViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + private void init() { + setPageTransformer(true, new VerticalPageTransformer()); + setOverScrollMode(OVER_SCROLL_NEVER); + } + + private class VerticalPageTransformer implements ViewPager.PageTransformer { + + @Override + public void transformPage(View view, float position) { + if (position < -1) { + view.setAlpha(0); + } else if (position <= 1) { + view.setAlpha(1); + view.setTranslationX(view.getWidth() * -position); + float yPosition = position * view.getHeight(); + view.setTranslationY(yPosition); + } else { + view.setAlpha(0); + } + } + } + + private MotionEvent swapXY(MotionEvent ev) { + float width = getWidth(); + float height = getHeight(); + float newX = (ev.getY() / height) * width; + float newY = (ev.getX() / width) * height; + ev.setLocation(newX, newY); + return ev; + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev){ + boolean intercepted = super.onInterceptTouchEvent(swapXY(ev)); + swapXY(ev); + return intercepted; + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + return super.onTouchEvent(swapXY(ev)); + } + +} |