美文网首页
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