由于Viewpager的滑动速度是固定的,所以很蛋疼。看了老外的文章可以利用反射机制,修改Viewpager的滑动速度。下面是代码实现:

 

需要新建个类FixedSpeedScoller继承自scroller类

import android.content.Context;import android.view.animation.Interpolator;import android.widget.Scroller;/** * FixedSpeedScroller for controlling sliding animation speed. It uses the java * reflection mechanism. *  * @version 1.00 2014.1.6 * @author Huang.xin gkx100120 *  */public class FixedSpeedScroller extends Scroller {    private int mDuration = 1500; // default time is 1500ms    public FixedSpeedScroller(Context context) {super(context);    }    public FixedSpeedScroller(Context context, Interpolator interpolator) {super(context, interpolator);    }    @Override    public void startScroll(int startX, int startY, int dx, int dy, int duration) {// Ignore received duration, use fixed one insteadsuper.startScroll(startX, startY, dx, dy, mDuration);    }    @Override    public void startScroll(int startX, int startY, int dx, int dy) {// Ignore received duration, use fixed one insteadsuper.startScroll(startX, startY, dx, dy, mDuration);    }    /**     * set animation time     *      * @param time     */    public void setmDuration(int time) {mDuration = time;    }    /**     * get current animation time     *      * @return     */    public int getmDuration() {return mDuration;    }}


然后需要在初始化Viewpager的地方,加入以下代码:

 FixedSpeedScroller mScroller = null; private void controlViewPagerSpeed() {try {    Field mField;    mField = ViewPager.class.getDeclaredField("mScroller");    mField.setAccessible(true);    mScroller = new FixedSpeedScroller(    mMainHolder.main_viewpager.getContext(),    new AccelerateInterpolator());    mScroller.setmDuration(2000); // 2000ms    mField.set(mMainHolder.main_viewpager, mScroller);} catch (Exception e) {    e.printStackTrace();}    }

setmDuration 可以设定想要的时间,这个时间就是滑动的时间。注意上面的mMainHolder.main_viewpager参数,这个是我的viewpager对象,如果大家要用的话,需要修改成自己的viewpager对象。

更多相关文章

  1. android软引用
  2. Android之Socket的基于UDP传输
  3. Android(安卓)Instrumentation源码分析(附Activity启动流程)
  4. Imageview.setAdjustViewBounds用法
  5. Android开发人员不得不收集的代码(持续更新中)(http://www.jiansh
  6. android setBackgroundDrawable setImageBitmap 区别
  7. 《Android》Lesson20-广播2
  8. Android(安卓)- 实现各种形状的ImageView
  9. Android(安卓)输入系统(一)InputManagerService

随机推荐

  1. 【文档】五、Mysql Binlog事件结构
  2. g++ 连接 mysql 编译报错 /usr/bin/ld: c
  3. Mysql 查看及设置事物隔离级别
  4. mysql学习之路_外键
  5. 如何用mysql或Navicat实现流水号的插入
  6. 远程服务器CentOS7安装MySQL并用本地Navi
  7. 在mac中配置apache+php5.3+mysql的环境,修
  8. 如何在mysql中的两个值之间插入一个新值
  9. 主义通过扩展来破坏对实体的查询
  10. 新版MySql 5.6.20,安装后无法登陆的解决办