Android 顶部轮播 JazzyViewPager 改变滑动速度
来源:互联网 发布:nginx cc攻击防御 编辑:程序博客网 时间:2024/05/20 08:24
github上有个顶部轮播的开源项目JazzyViewPager-master,图片切换动画是手动控制的,利用定时+setCurrentItem方法可以实现自动切换,但是会出现一个问题,切换过程中的滑动速度特别快,并且这个速度不能更改,是写死的,经查找资料,可以用反射实现。先列出正确做法,然后再记录下我开始时的错误做法。
首先重写Scroller:
package com.yy.my.utils;import android.content.Context;import android.view.animation.Interpolator;import android.widget.Scroller;public class FixedSpeedScroller extends Scroller{ private int mDuration = 3000; 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, int duration) { // TODO Auto-generated method stub super.startScroll(startX, startY, dx, dy, mDuration); } @Override public void startScroll(int startX, int startY, int dx, int dy) { // TODO Auto-generated method stub super.startScroll(startX, startY, dx, dy, mDuration); } public void setmDuration(int mDuration) {this.mDuration = mDuration; } public int getmDuration() {return mDuration; } }
/** * 设置ViewPager的滑动速度 */private void initViewPagerScroll(){try{Field mScroller = null;mScroller = ViewPager.class.getDeclaredField("mScroller");mScroller.setAccessible(true);FixedSpeedScroller scroller = new FixedSpeedScroller(getContext());scroller.setmDuration(2500); //改变滑动速度mScroller.set(this, scroller);} catch (NoSuchFieldException e){e.printStackTrace();} catch (IllegalAccessException e){e.printStackTrace();} catch (IllegalArgumentException e){e.printStackTrace();}}
对于JazzyViewPager-master项目,只需在JazzyViewPager类的初始化方法里面调用initViewPagerScroll()即可。
由于本人对java反射不了解,看到JazzyViewPager继承了ViewPager,所以开始时是这样写的:
Field mScroller = null;mScroller = JazzyViewPager.class.getDeclaredField("mScroller");然后发现抛出异常,说是没有找到“mScroller”,然后我就在JazzyViewPager中自定义了一个mScroller,结果没抛异常了,但是滑动速度没有改变。
现在想想,应该是这样的,原始ViewPager的setCurrentItem方法里面应该是用mScroller变量实现的滑动,由于JazzyViewPager里面没有复写setCurrentItem方法,所以这里应该调用原始的setCurrentItem方法,所以应该是从原始的ViewPager里面得到mScroller变量,然后用自己定义的scroller替换掉原始的,从而改变滑动速度。下面给出百度百科的java反射机制定义,跟我猜测的差不多,嘿嘿。。。。。
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
0 0
- Android 顶部轮播 JazzyViewPager 改变滑动速度
- android JazzyViewPager
- 改变ViewPager滑动速度
- 改变viewpager滑动速度
- Android SuperIndicator 滑动轮播
- Android-ViewPager-循环滑动(轮播)
- 自动轮播并且能够无限轮播的ViewPager,可纵向滑动、可修改滑动速度
- Android ScrollView .顶部栏滑动透明度改变,底部栏滑到特定位置显示或隐藏效果
- JazzyViewPager
- android顶部菜单栏+滑动图片
- android 滑动顶部布局停留
- Android 仿美团顶部滑动菜单
- 图片滑动轮播
- Android中ViewPager的左右滑动以及轮播功能
- Android使用ViewPager实现图片轮播和手势滑动
- Android Viewpager与WebView轮播滑动冲突的解决方案
- Viewpager自动轮播,可修改滑动速度
- Android控制ScrollView滑动速度
- 用枚举法填运算符
- O2O模式点餐平台哪家强?
- 解决oracle取日期到页面为英文格式的问题
- Go语言的初步认识
- 设计模式——模板方法
- Android 顶部轮播 JazzyViewPager 改变滑动速度
- String转换为Timestamp
- JVM加载class文件的原理机制
- 多线程中的锁系统(一)-基础用法
- [QT]从文件读入中文字符
- CentOs下安装Jdk
- UML相关工具一览(截止2015年2月)
- Java加密解密相关
- servlet的一些细节