blob: 3d6404237011b194d0b6b3a80e066a26dd378e01 [file] [log] [blame]
David Morrissey44e24922017-11-20 10:36:41 +00001package com.davemorrissey.labs.subscaleview.test.viewpager;
David Morrissey742b0372017-04-04 10:41:23 +01002
3import android.content.Context;
4import android.support.v4.view.ViewPager;
5import android.util.AttributeSet;
6import android.view.MotionEvent;
7import android.view.View;
8
9/**
10 * From http://stackoverflow.com/a/22797619/2719186
11 */
12public class VerticalViewPager extends ViewPager {
13
14 public VerticalViewPager(Context context) {
15 super(context);
16 init();
17 }
18
19 public VerticalViewPager(Context context, AttributeSet attrs) {
20 super(context, attrs);
21 init();
22 }
23
24 private void init() {
25 setPageTransformer(true, new VerticalPageTransformer());
26 setOverScrollMode(OVER_SCROLL_NEVER);
27 }
28
29 private class VerticalPageTransformer implements ViewPager.PageTransformer {
30
31 @Override
32 public void transformPage(View view, float position) {
33 if (position < -1) {
34 view.setAlpha(0);
35 } else if (position <= 1) {
36 view.setAlpha(1);
37 view.setTranslationX(view.getWidth() * -position);
38 float yPosition = position * view.getHeight();
39 view.setTranslationY(yPosition);
40 } else {
41 view.setAlpha(0);
42 }
43 }
44 }
45
46 private MotionEvent swapXY(MotionEvent ev) {
47 float width = getWidth();
48 float height = getHeight();
49 float newX = (ev.getY() / height) * width;
50 float newY = (ev.getX() / width) * height;
51 ev.setLocation(newX, newY);
52 return ev;
53 }
54
55 @Override
56 public boolean onInterceptTouchEvent(MotionEvent ev){
57 boolean intercepted = super.onInterceptTouchEvent(swapXY(ev));
58 swapXY(ev);
59 return intercepted;
60 }
61
62 @Override
63 public boolean onTouchEvent(MotionEvent ev) {
64 return super.onTouchEvent(swapXY(ev));
65 }
66
Frieder Bluemleb2d4dad2017-03-23 18:25:23 +080067}