Change ViewPager animation duration when sliding programmatically

前端 未结 7 1113
清酒与你
清酒与你 2020-11-28 20:45

I\'m changing slide with the following code:

viewPager.setCurrentItem(index++, true);

But it changes too fast. Is there a way to set manual

7条回答
  •  野趣味
    野趣味 (楼主)
    2020-11-28 20:47

    Here is my code used in Librera Reader

    public class MyViewPager extends ViewPager {
    
      public MyViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
            initMyScroller();
        }
    
        private void initMyScroller() {
            try {
                Class viewpager = ViewPager.class;
                Field scroller = viewpager.getDeclaredField("mScroller");
                scroller.setAccessible(true);
                scroller.set(this, new MyScroller(getContext())); // my liner scroller
    
                Field mFlingDistance = viewpager.getDeclaredField("mFlingDistance");
                mFlingDistance.setAccessible(true);
                mFlingDistance.set(this, Dips.DP_10);//10 dip
    
                Field mMinimumVelocity = viewpager.getDeclaredField("mMinimumVelocity");
                mMinimumVelocity.setAccessible(true);
                mMinimumVelocity.set(this, 0); //0 velocity
    
            } catch (Exception e) {
                LOG.e(e);
            }
    
        }
    
        public class MyScroller extends Scroller {
            public MyScroller(Context context) {
                super(context, new LinearInterpolator()); // my LinearInterpolator
            }
    
            @Override
            public void startScroll(int startX, int startY, int dx, int dy, int duration) {
                super.startScroll(startX, startY, dx, dy, 175);//175 duration
            }
        }
    
     }
    

提交回复
热议问题