美文网首页
Android viewPager+fragment组合 切换页

Android viewPager+fragment组合 切换页

作者: 阳光下的美好_6e13 | 来源:发表于2018-06-07 09:45 被阅读28次

问题描述:

问题1、使用viewPager+fragment+RadioGroup实现首页的Tab点击切换效果,应项目需求不需要滑动切换界面,解决步骤1;

问题2、跳转到viewPager指定页面,这个时候需要使用ViewPager.setCurrentItem(index)方法。但是在使用这个方法的时候有这样一个问题,页面在跳转的时候有滑动效果,这个用户体验不是很好,看到的是直接跳转过来的的解决方法2,去掉滑屏速度。

解决方法:

1.禁止滑动翻页的ViewPager
/**
 * <p>可以禁止滑动翻页的ViewPager </p>
 * @name NoScrollViewPager
 */
public class NoScrollViewPager extends ViewPager {

    private boolean noScroll = true;

    public NoScrollViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public NoScrollViewPager(Context context) {
        super(context);
    }

    public void setNoScroll(boolean noScroll) {
        this.noScroll = noScroll;
    }

    @Override
    public void scrollTo(int x, int y) {
        super.scrollTo(x, y);
    }

    @Override
    public boolean onTouchEvent(MotionEvent arg0) {
        if (noScroll)
            return false;
        else
            return super.onTouchEvent(arg0);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent arg0) {
        if (noScroll)
            return false;
        else
            return super.onInterceptTouchEvent(arg0);
    }

    @Override
    public void setCurrentItem(int item, boolean smoothScroll) {
        super.setCurrentItem(item, smoothScroll);
    }

    @Override
    public void setCurrentItem(int item) {
        super.setCurrentItem(item);
    }

    @Override
    public void setSystemUiVisibility(int visibility) {
        super.setSystemUiVisibility(visibility);

    }
}
使用方法:
  <com.crazyfitting.commons.NoScrollViewPager
            android:id="@+id/container_pager"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            app:viewPagerAdapter="@{viewPaAdapter}" />
2.设置Viewpager的滑动速度i
public class FixedSpeedScroller extends Scroller {
    private int mDuration = 0;//滑屏速度

    /**
     * 设置滑屏速度
     *
     * @param mDuration 速度
     */
    public void setmDuration(int mDuration) {
        this.mDuration = mDuration;
    }

    public FixedSpeedScroller(Context context) {
        super(context);
    }

    public FixedSpeedScroller(Context context, Interpolator interpolator) {
        super(context, interpolator);
    }

    public FixedSpeedScroller(Context context, Interpolator interpolator, boolean flywheel) {
        super(context, interpolator, flywheel);
    }

    @Override
    public void startScroll(int startX, int startY, int dx, int dy) {
        super.startScroll(startX, startY, dx, dy, mDuration);
    }

    @Override
    public void startScroll(int startX, int startY, int dx, int dy, int duration) {
        super.startScroll(startX, startY, dx, dy, mDuration);
    }

    public void initViewPagerScroll(ViewPager viewPager) {
        try {
            Field mScroller = ViewPager.class.getDeclaredField("mScroller");
            mScroller.setAccessible(true);
            mScroller.set(viewPager, this);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用方法:
  viewPager.setCurrentItem(position);
  FixedSpeedScroller mScroller = new FixedSpeedScroller(this);
  mScroller.initViewPagerScroll(binding.containerPager);

相关文章

网友评论

      本文标题:Android viewPager+fragment组合 切换页

      本文链接:https://www.haomeiwen.com/subject/womwsftx.html