Android开发心得——viewpager调用setCurrentItem设页面没有滑动效果?我来帮你

本博文欢迎转载,转载请注明来自唔系好人之Android小码农

最近做项目,遇到一个焦点图的问题,而我,在这段时间可以说是viewpager的爱好者,虽然有很多优秀的开源项目,但是我还是想要研究一下,viewpager,怎么自己做带有滑动效果的焦点图切换。

通过一轮的网络搜索,最终研究到一个方法通过反射来获取viewpager的内部属性,然后设置他的滑动属性。

说实话,对于我这种半路出家的和尚来说,反射是个什么真的不懂,我也是听同事说的,他这个反射的作用就是强制获取了一个并不公开的内部属性,并修改来达到目的。

好了,废话不多说,先来看看我们要做什么,首先是建立一个类继承scroller,并重写scroller,代码大概如下:

 1     private int mDuration = 1500;
 2
 3     public FixedSpeedScroller(Context context) {
 4         super(context);
 5         // TODO Auto-generated constructor stub
 6     }
 7
 8     public FixedSpeedScroller(Context context, Interpolator interpolator) {
 9         super(context, interpolator);
10         // TODO Auto-generated constructor stub
11     }
12
13     // public FixedSpeedScroller(Context context, Interpolator interpolator,
14     // boolean flywheel) {
15     // super(context, interpolator, flywheel);
16     // // TODO Auto-generated constructor stub
17     // }
18
19     @Override
20     public void startScroll(int startX, int startY, int dx, int dy, int duration) {
21         // Ignore received duration, use fixed one instead
22         super.startScroll(startX, startY, dx, dy, mDuration);
23     }
24
25     @Override
26     public void startScroll(int startX, int startY, int dx, int dy) {
27         // Ignore received duration, use fixed one instead
28         super.startScroll(startX, startY, dx, dy, mDuration);
29     }
30
31     /**
32      * @Description 设置滑动间隔
33      * @author Created by qinxianyuzou on 2014-10-29.
34      * @param duration
35      */
36     public void setDuration(int duration) {
37         mDuration = duration;
38     }

其中有一个关键的属性是mDuration,这个是设置滑动的间隔,单位是毫秒(有经验的其实都已经看懂了),我设置了一个外部方法用于设置这个属性。

另外有一个初始化方法被我注释了是因为这个方法最低支持到API11,而我的项目要兼容到API8,所以注释掉了。说到这个,真的要吐槽一下,现在谁还用2.3的操作系统?老爷机都已经装上Android4.0以上的系统了。

在写好这个类之后就是调用了,只要写在你要调用的viewpager的activity里面就可以,当然,你记得给viewpager初始化,上代码

 1         Interpolator sInterpolator = new AccelerateInterpolator();
 2         try {
 3             Field mScroller;
 4             mScroller = ViewPager.class.getDeclaredField("mScroller");
 5             mScroller.setAccessible(true);
 6             FixedSpeedScroller scroller = new FixedSpeedScroller(vp_circleSummary_teacher.getContext(), sInterpolator);
 7             scroller.setDuration(1000);
 8             mScroller.set(vp_circleSummary_teacher, scroller);
 9         } catch (NoSuchFieldException e) {
10         } catch (IllegalArgumentException e) {
11         } catch (IllegalAccessException e) {
12         }

原理不是很懂,大概就是有个大牛去看了viewpager的源码,然后发现了field这个类是用于设置viewpager的滑动问题,于是就被用反射抽取了出来,并且设置。

在set Field这个属性之前,记得设置间隔,不然就会变成上面那个scroller类的默认时间。

经过这么设置一下之后,你在用settCurrentItem来设置页面,那么就会发现,你的viewpager已经不再像以前一样,翻页秒翻,而是带了一个滑动的效果。

时间: 2024-10-10 20:50:32

Android开发心得——viewpager调用setCurrentItem设页面没有滑动效果?我来帮你的相关文章

android开发 Fragment嵌套调用常见错误

在activity中有时需要嵌套调用fragment,但嵌套调用往往带来视图的显示与预期的不一样或是fragment的切换有问题.在使用时要注意几点: 1.fragment中嵌套fragment,子fragment视图无法显示: 如下: 父fragment的.xml文件: <pre name="code" class="html"><LinearLayout xmlns:android="http://schemas.android.co

Android 利用ViewPager实现底部圆点导航左右滑动效果以及Fragment页面切换

上一篇博文我们介绍了利用ViewPager和Fragment实现顶部滑块左右滑动效果,具体参考(http://blog.csdn.net/a123demi/article/details/39480385). 而本篇博文将实例讲解利用ViewPager实现底部圆点导航左右滑动效果,以及被滑动界面实现监听事件,同时通过Fragment实现页面的切换. 对于该效果的实现,需要实现以下几个问题: 1. 底部圆点加载和实现方法? 2. 怎样实现左右滑动效果? 3. 被滑动页面,怎样实现监听事件? 4.

C#程序员学习Android开发系列之调用WebService

我在学习Android开发过程中遇到的第一个疑问就是Android客户端是怎么跟服务器数据库进行交互的呢?这个问题是我当初初次接触Android时所困扰我的一个很大的问题,直到几年前的一天,我突然想到WebService是否可以呢?让WebService充当服务器端的角色,完成与服务器数据库操作相关的事情,而Android客户端只要按照WebService方法参数的要求去调用就行了.在当时我对这个解决方案的实现还没模糊,我想这个问题也是初学Android的朋友肯定会想到的问题.那么现在就让我们动

android开发心得之知识的量变到质变

随着身边越来越多的人开始了尝试android开发,看着他们一点点学期 从nodepad++写代码 cmd 执行,到安装eclipse 和android SDK,仿佛看到了昨天的我一样,一样勤勤恳恳的学着. 刚开始接触安卓时,觉得:哇,自己写app好强啊,可能那就是我想做的.然后就开始从网上看视频,图书馆借书,学java语言,学android机制,逐步着手开发.纸上得来终觉浅,绝知此事要躬行.看的再多不如自己能写,每一位android讲师都会说这样的话,说明了自己动手的重要性.这里我想给打算学习或

Android开发心得(转)

前言: 很早以前,就听人说过android以后会火起来,作为一个前瞻性对它有所了解会是一个转型的好机会,javaweb太成熟饱和了,现在市面上各种android手机层出不穷,网上各种android视频连续剧一样跟进,安卓一下子成为了热门话题,刚开始也是出于个人兴趣学的很hi感觉挺容易上手的样子,后来工作中才发现问题很多也很棘手,慢慢的在纠结和痛苦中琢磨出了一些经验和规律! 1.android作为view层,要实现和服务层低耦合,必须使用webservice接口,目前还没有十分完善的插件,曾经试过

【Android UI】顶部or底部菜单的循环滑动效果一

实现了分页的滑动效果,做的demo流畅运行 注:貌似支持的样式(控件)有一定的限制,我试过短信的listview页面,暂无法实现滑动效果 java文件:MainActivity.java.Activity1.java.Activity2.java.Activity3.java.Activity4.java MainActivity.java package com.example.tabhostmove; import android.app.Activity; import android.a

android仿系统Launcher界面,实现分屏,左右滑动效果(ViewSwitcher)

ViewSwitcher代表了视图切换组件, 本身继承了FrameLayout ,可以将多个View叠在一起 ,每次只显示一个组件.当程序控制从一个View切换到另个View时,ViewSwitcher 支持指定动画效果. 为了给ViewSwitcher 添加多个组件, 一般通过ViewSwitcher 的setFactory 方法为止设置ViewFactory ,并由ViewFactory为之创建View 即可. 下面通过一个实例来介绍 ViewSwitcher的用法.(仿Android系统L

Android开发系列之调用WebService

我在学习Android开发过程中遇到的第一个疑问就是Android客户端是怎么跟服务器数据库进行交互的呢?这个问题是我当初初次接触Android时所困扰我的一个很大的问题,直到几年前的一天,我突然想到WebService是否可以呢?让WebService充当服务器端的角色,完成与服务器数据库操作相关的事情,而Android客户端只要按照WebService方法参数的要求去调用就行了.在当时我对这个解决方案的实现还没模糊,我想这个问题也是初学Android的朋友肯定会想到的问题.那么现在就让我们动

Android开发技巧——ViewPager衍生出来的2个类

1.不能左右滑动的ViewPager /* * Date: 14-7-28 * Project: Access-Control-V2 */ package cn.irains.access.v2.common; import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; /**