package me.kaelaela.verticalviewpager;import android.content.Context;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.view.MotionEvent;import me.kaelaela.verticalviewpager.transforms.DefaultTransformer;public class VerticalViewPager extends ViewPager { public VerticalViewPager(Context context) { this(context, null); } public VerticalViewPager(Context context, AttributeSet attrs) { super(context, attrs); setPageTransformer(false, new DefaultTransformer()); } private MotionEvent swapTouchEvent(MotionEvent event) { float width = getWidth(); float height = getHeight(); float swappedX = (event.getY() / height) * width; float swappedY = (event.getX() / width) * height; event.setLocation(swappedX, swappedY); return event; } @Override public boolean onInterceptTouchEvent(MotionEvent event) { boolean intercept = super.onInterceptTouchEvent(swapTouchEvent(event)); //If not intercept, touch event should not be swapped. swapTouchEvent(event); return intercept; } @Override public boolean onTouchEvent(MotionEvent ev) { return super.onTouchEvent(swapTouchEvent(ev)); } //viewpager 是否可以滑动的 true 滑动 false 禁止滑动 private boolean isCanScroll = true; public void setScanScroll(boolean isCanScroll){ this.isCanScroll = isCanScroll; } @Override public void scrollTo(int x, int y){ if (isCanScroll){ super.scrollTo(x, y); } }}翻页时的透明变化 package me.kaelaela.verticalviewpager.transforms;import android.support.v4.view.ViewPager;import android.view.View;public class DefaultTransformer implements ViewPager.PageTransformer { @Override public void transformPage(View view, float position) { float alpha = 0; if (0 <= position && position <= 1) { alpha = 1 - position; } else if (-1 < position && position < 0) { alpha = position + 1; } view.setAlpha(alpha); view.setTranslationX(view.getWidth() * -position); float yPosition = position * view.getHeight(); view.setTranslationY(yPosition); }}使用方法和普通的viewpager 一样使用。做项目要求某种情况下ViewPager不能滑动,有说重写Ontouch的,各种。都试了试,基本都不可用。 自己看ViewPager源码,知道VIewPager移动全部都调用了scrollTo方法,这个是View的方法,那么我们只需要重写这个方法就可以禁止ViewPager滑动
viewpager 竖着滑动
最新推荐文章于 2021-05-26 22:08:30 发布