zoukankan      html  css  js  c++  java
  • 修改ViewPager调用setCurrentItem时,滑屏的速度

    原文摘自: 修改ViewPager调用setCurrentItem时,滑屏的速度

    在使用ViewPager的过程中,有需要直接跳转到某一个页面的情况,这个时候就需要用到ViewPager的setCurrentItem方法了,它的意思是跳转到ViewPager的指定页面,但在使用这个方法的时候有个问题,跳转的时候有滑动效果,当需要从当前页面跳转到其它页面时,跳转页面跨度过大、或者ViewPager每个页面的视觉效果相差较大时,通过这种方式实现ViewPager跳转显得很不美观,怎么办呢,我们可以去掉在使用ViewPager的setCurrentItem方法时的滑屏速度,具体实现如下:

    一、自定义一个Scroll类,用于控制ViewPager滑动速度:

    [java] view plaincopy
     
    1. <span style="font-size:18px">import android.content.Context;  
    2. import android.view.animation.Interpolator;  
    3. import android.widget.Scroller;  
    4.   
    5. public class FixedSpeedScroller extends Scroller {  
    6.     private int mDuration = 0;  
    7.   
    8.     public FixedSpeedScroller(Context context) {  
    9.         super(context);  
    10.     }  
    11.   
    12.     public FixedSpeedScroller(Context context, Interpolator interpolator) {  
    13.         super(context, interpolator);  
    14.     }  
    15.   
    16.     public FixedSpeedScroller(Context context, Interpolator interpolator, boolean flywheel) {  
    17.         super(context, interpolator, flywheel);  
    18.     }  
    19.   
    20.   
    21.     @Override  
    22.     public void startScroll(int startX, int startY, int dx, int dy, int duration) {  
    23.         super.startScroll(startX, startY, dx, dy, mDuration);  
    24.     }  
    25.   
    26.     @Override  
    27.     public void startScroll(int startX, int startY, int dx, int dy) {  
    28.         super.startScroll(startX, startY, dx, dy, mDuration);  
    29.     }  
    30. }</span>  


    二、在初始化ViewPager时,对ViewPager作如下设置:

    [java] view plaincopy
     
    1. <span style="font-size:18px">/** 
    2.      * 设置ViewPager的滑动速度 
    3.      *  
    4.      * */  
    5.     private void setViewPagerScrollSpeed( ){  
    6.         try {  
    7.             Field mScroller = null;  
    8.             mScroller = ViewPager.class.getDeclaredField("mScroller");  
    9.             mScroller.setAccessible(true);   
    10.             FixedSpeedScroller scroller = new FixedSpeedScroller( mViewPager.getContext( ) );  
    11.             mScroller.set( mViewPager, scroller);  
    12.         }catch(NoSuchFieldException e){  
    13.               
    14.         }catch (IllegalArgumentException e){  
    15.               
    16.         }catch (IllegalAccessException e){  
    17.               
    18.         }  
    19.     }</span>  


    运行代码后你就发现,它是直接跳转,没有滑屏效果了。

  • 相关阅读:
    面试题系列--【vue的生命周期】
    面试题系列--【hash和history的区别】
    ES6系列--【事件循环 EventLoop(Promise,setTimeOut,async/await执行顺序)】
    ES6系列--【ES6数组新增方法】
    ES6系列--【ES6 新增字符串方法】
    微信小程序系列--【VXML语法、VMSS样式、条件渲染、列表渲染、模板、引用、组件、事件系统】
    微信小程序系列--【小程序注册、工程创建、全局配置、页面配置】
    微信小程序系列---【五星好评案例】
    react系列---【Hooks】
    2019.9.18-单向循环链表删除元素(+之前完整代码)
  • 原文地址:https://www.cnblogs.com/YangBinChina/p/3540612.html
Copyright © 2011-2022 走看看