原创首发    
 ViewPager只能横着滚动?no,也可以竖着滚动,ViewPager.PageTransformer有奇效,简单实例,复制粘贴就有效果。

这里要实现的就是ViewPager的垂直滚动。先上效果图了。
https://chuantu.xyz/t6/703/1575879903x2728278915.gif
前方高能,注意代码。
第一,MainActivity
public class MainActivity extends Activity {
    
    private VerticalViewPager mViewPager;
    //下面三张图片自己截取一下添加到mipmap中就ok。
    private int[] mImgIds = new int[]{R.mipmap.nvhaione, R.mipmap.nvhaitwo, R.mipmap.nvhaithree};
    private List<ImageView> mImageViews = new ArrayList<ImageView>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        initData();
        //下面这个  VerticalViewPager   不要写错哦。
        mViewPager = (VerticalViewPager) findViewById(R.id.id_viewpager);
        mViewPager.setAdapter(new PagerAdapter() {
            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                container.addView(mImageViews.get(position));
                return mImageViews.get(position);
            }
            @Override
            public void destroyItem(ViewGroup container, int position,
                                    Object object) {
                container.removeView(mImageViews.get(position));
            }
            @Override
            public boolean isViewFromObject(View view, Object object) {
                return view == object;
            }
            @Override
            public int getCount() {
                return mImgIds.length;
            }
        });
    }
    //数据初始化
    private void initData() {
        for (int imgId : mImgIds) {
            ImageView imageView = new ImageView(getApplicationContext());
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setImageResource(imgId);
            mImageViews.add(imageView);
        }
    }
}
第二,VerticalViewPager
public class VerticalViewPager extends ViewPager {
    public VerticalViewPager(Context context) {
        this(context, null);
    }
    public VerticalViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        //设置viewpage的切换动画,这里设置才能真正实现垂直滑动的viewpager
        setPageTransformer(true, new VerticalPageTransformer());
    }
    /**
     *----------------   调整xy方向  --------------------------------
     */
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        boolean intercept = super.onInterceptTouchEvent(swapEvent(ev));
        swapEvent(ev);
        return intercept;
    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return super.onTouchEvent(swapEvent(ev));
    }
    private MotionEvent swapEvent(MotionEvent event) {
        //获取宽高
        float width = getWidth();
        float height = getHeight();
        //将Y轴的移动距离转变成X轴的移动距离
        float swappedX = (event.getY() / height) * width;
        //将X轴的移动距离转变成Y轴的移动距离
        float swappedY = (event.getX() / width) * height;
        //重设event的位置
        event.setLocation(swappedX, swappedY);
        return event;
    }
    /**
     * ----------------------     实现PageTransformer重写。    -----------------------------
     */
    public class VerticalPageTransformer implements ViewPager.PageTransformer {
        @Override
        public void transformPage(View view, float position) {
            if (position < -1) { // [-Infinity,-1)
                // This page is way off-screen to the left.
                view.setAlpha(0);
            } else if (position <= 1) { // [-1,1]
                view.setAlpha(1);
                // Counteract the default slide transition
                view.setTranslationX(view.getWidth() * -position);
                //set Y position to swipe in from top
                float yPosition = position * view.getHeight();
                view.setTranslationY(yPosition);
            } else { // (1,+Infinity]
                // This page is way off-screen to the right.
                view.setAlpha(0);
            }
        }
    }
}
第三:activity_main.xml
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <com.xxxxxx.yyyyyyactivity.VerticalViewPager
        android:id="@+id/id_viewpager"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="20dp"
        android:background="#6666"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>
第四:容易出错的地方
activity_main.xml中的 <com.xxxxxx.yyyyyyactivity.VerticalViewPager> 这个是你自己的 包名+上面自己新建的VerticalViewPager。
OK,看到这里了,那么重点来了,点个
赞 呗!!!































