ViewPager 滑动速度设置

原文链接:http://blog.csdn.net/liyulei316686082/article/details/7616734



原理说明:

改变ViewPager滑动的速度和动画的变化率。

代码:

  1. public class FixedSpeedScroller extends Scroller {        
  2.     private int mDuration = 1500;        
  3.     public FixedSpeedScroller(Context context) {           
  4.         super(context);       
  5.         }        
  6.     public FixedSpeedScroller(Context context, Interpolator interpolator) {           
  7.         super(context, interpolator);       
  8.         }        
  9.            
  10.     @Override      
  11.     public void startScroll(int startX, int startY, int dx, int dy, int duration) {      
  12.         // Ignore received duration, use fixed one instead           
  13.         super.startScroll(startX, startY, dx, dy, mDuration);       
  14.         }        
  15.     @Override       
  16.     public void startScroll(int startX, int startY, int dx, int dy) {          
  17.             // Ignore received duration, use fixed one instead          
  18.             super.startScroll(startX, startY, dx, dy, mDuration);      
  19.             }   
  20.     public void setmDuration(int time){  
  21.         mDuration = time;  
  22.     }     
  23.     public int getmDuration(){  
  24.         return mDuration;  
  25.     }     
  26.   
  27. }  






  1. public class ViewPagerDemoActivity extends Activity {  
  2.    
  3.  private ViewPager mViewPager = null;  
  4.  private Button mLeft = null;  
  5.  private Button mRight = null;  
  6.    
  7.  private static final int PAGER_NUM = 10;//10个页面  
  8.  private int mCurrentViewID = 0;         //当前页面  
  9.  private int mMyDuration = 100;          //持续时间  
  10.    
  11.  private FixedSpeedScroller mScroller;  
  12.  private YLeiPageAdapter mYLeiPageAdapter = null;  
  13.  private List<View> mListViews;  
  14.    
  15.     @Override  
  16.     public void onCreate(Bundle savedInstanceState) {  
  17.         super.onCreate(savedInstanceState);  
  18.         setContentView(R.layout.main);  
  19.           
  20.         mViewPager = (ViewPager)findViewById(R.id.viewpager);  
  21.         mLeft = (Button)findViewById(R.id.left);   
  22.         mRight = (Button)findViewById(R.id.right);   
  23.         mLeft.setOnClickListener(mOnClickListener);  
  24.   mRight.setOnClickListener(mOnClickListener);  
  25.     
  26.   mListViews = new ArrayList<View>();  
  27.   for(int i1; i<= PAGER_NUM; i++){  
  28.    MyPagerView view = new MyPagerView(this, i);  
  29.    mListViews.add(view);  
  30.   }  
  31.   mYLeiPageAdapter = new YLeiPageAdapter(this, mListViews);  
  32.   mViewPager.setAdapter(mYLeiPageAdapter);  
  33.   mViewPager.setOnPageChangeListener(mOnPageChangeListener);  
  34.     
  35.   /*<span style="color:#ff0000;">主要代码段</span>*/  
  36.   try {               
  37.    Field mField = ViewPager.class.getDeclaredField("mScroller");               
  38.    mField.setAccessible(true);     
  39.     //<span style="color:#ff0000;">设置加速度 ,通过改变FixedSpeedScroller这个类中的mDuration来改变动画时间(如mScroller.setmDuration(mMyDuration);)   
  40. </span>   mScroller = new FixedSpeedScroller(mViewPager.getContext(), new AccelerateInterpolator());          
  41.    mField.set(mViewPager, mScroller);           
  42.    } catch (Exception e) {           
  43.     e.printStackTrace();  
  44.    }   
  45.     }  
  46.       
  47.     private OnClickListener mOnClickListener = new OnClickListener(){  
  48.   @Override  
  49.   public void onClick(View v) {  
  50.    switch (v.getId()){  
  51.    case R.id.left:  
  52.     if(mCurrentViewID != 0){  
  53.      mCurrentViewID--;  
  54.      mViewPager.setCurrentItem(mCurrentViewID, true);  
  55.     }  
  56.     mMyDuration -100;  
  57.     mScroller.setmDuration(mMyDuration);  
  58.     break;  
  59.    case R.id.right:  
  60.     if(mCurrentViewID != PAGER_NUM-1){  
  61.      mCurrentViewID++;  
  62.      mViewPager.setCurrentItem(mCurrentViewID, true);  
  63.     }  
  64.     mMyDuration += 100;  
  65.     mScroller.setmDuration(mMyDuration);  
  66.     break;  
  67.    }  
  68.      
  69.   }};  
  70.     
  71.   private OnPageChangeListener mOnPageChangeListener = new OnPageChangeListener(){  
  72.   
  73.    @Override  
  74.    public void onPageScrollStateChanged(int arg0) {  
  75.     // TODO Auto-generated method stub  
  76.    }  
  77.   
  78.    @Override  
  79.    public void onPageScrolled(int arg0, float arg1, int arg2) {  
  80.     // TODO Auto-generated method stub  
  81.    }  
  82.    @Override  
  83.    public void onPageSelected(int currentID) {  
  84.     // TODO Auto-generated method stub  
  85.     mCurrentViewID = currentID;  
  86.    }};  
  87. }  


 

 

FixedSpeedScroller类:

[html]  view plain  copy
  1. package blog.csdn.net.liyulei316686082;  
  2.   
  3. import android.content.Context;  
  4. import android.view.animation.Interpolator;  
  5. import android.widget.Scroller;  
  6.   
  7. public class FixedSpeedScroller extends Scroller {        
  8.     private int mDuration = 1500;        
  9.     public FixedSpeedScroller(Context context) {           
  10.         super(context);       
  11.         }        
  12.     public FixedSpeedScroller(Context context, Interpolator interpolator) {           
  13.         super(context, interpolator);       
  14.         }        
  15.            
  16.     @Override      
  17.     public void startScroll(int startX, int startY, int dx, int dy, int duration) {      
  18.         // Ignore received duration, use fixed one instead           
  19.         super.startScroll(startX, startY, dx, dy, mDuration);       
  20.         }        
  21.     @Override       
  22.     public void startScroll(int startX, int startY, int dx, int dy) {          
  23.             // Ignore received duration, use fixed one instead          
  24.             super.startScroll(startX, startY, dx, dy, mDuration);      
  25.             }   
  26.     public void setmDuration(int time){  
  27.         mDuration = time;  
  28.     }     
  29.     public int getmDuration(){  
  30.         return mDuration;  
  31.     }     
  32.   
  33. }  


 http://blog.csdn.net/liyulei316686082/article/details/7616734


liyulei316686082
  • liyulei316686082
    2017-05-04 18:04117楼
  • 下载地址:http://download.csdn.net/download/liyulei316686082/9833676
csdn_zhang0727
  • csdn_zhang0727
    2017-04-29 10:53116楼
      回复
  • 大神有源码吗 求发一份 邮箱1131237942@qq.com
liyulei316686082
qq_35634146
  • qq_35634146
    2016-09-30 15:33115楼
      回复
  • 大神 这个没怎么用 希望发一份代码到我邮箱 谢谢!急求!邮箱是:605439469@qq.com
liyulei316686082

Android 自定义Viewpager滑动速度

  • HellDevil
  • HellDevil
  • 2014年01月11日 10:29
  • 11162
由于Viewpager的滑动速度是固定的,所以很蛋疼。看了老外的文章可以利用反射机制,修改Viewpager的滑动速度。下面是代码实现:   需要新建个类FixedSpeedScoller继承自scr...

Android ViewPager 修改滑动速度

  • yang786654260
  • yang786654260
  • 2015年07月15日 17:23
  • 2487
因为viewPager滑动速度太快而烦恼吗?用这个方法让viewPager的滑动掌控在你的手下:...

第三个引导页添加button按钮(滑动viewpager)

引导页里的button事件
  • glm_970414161
  • glm_970414161
  • 2016年08月06日 14:38
  • 2264

介绍自己的工作

  • Testing_mlt
  • Testing_mlt
  • 2010年09月16日 19:16
  • 1
博客这个东西大家已经熟悉不过了,一直由于忙碌工作的我已经过时了,很少有时间整理自己的思绪,去写写自己工作生活中的有意义的事情。今天开通了博客,很高兴能够在这个平台上和不认识的朋友进行交流。 签名中已经...

Android ViewPager 修改滑动速度

  • yang786654260
  • yang786654260
  • 2015年07月15日 17:23
  • 2487
因为viewPager滑动速度太快而烦恼吗?用这个方法让viewPager的滑动掌控在你的手下:...

viewPager控制滑动速度和时间

  • Ansionnal
  • Ansionnal
  • 2013年09月09日 09:37
  • 6049
遇到如下问题:viewpager滑动时如果想跳过很多条直接到最后一条,中间会黑屏。黑屏是因为中间的view没有加载出来的缘故。 stackOverflow上看到的解决方案,在这里记录一下, ...

ViewPager 滑动速度设置,并实现点击按钮滑动!

  • 2017年05月04日 17:57
  • 224KB
  • 下载

Button按钮换脸viewpager滑动+点击监听 _____部分重点代码

public class MainActivity extends AppCompatActivity { ArrayList fraarr = new ArrayList(); Ar...
  • kybkq1314
  • kybkq1314
  • 2017年09月20日 16:09
  • 132

Android 自定义Viewpager滑动速度

  • HellDevil
  • HellDevil
  • 2014年01月11日 10:29
  • 11162
由于Viewpager的滑动速度是固定的,所以很蛋疼。看了老外的文章可以利用反射机制,修改Viewpager的滑动速度。下面是代码实现:   需要新建个类FixedSpeedScoller继承自scr...

设置viewpager在使用setCurrentItem的滑动速度

在使用ViewPager的过程中,有需要直接跳转到某一个页面的情况,这个时候就需要用到ViewPager的setCurrentItem方法了,它的意思是跳转到ViewPager的指定页面,但在使用这个...
  • qq_26420489
  • qq_26420489
  • 2016年07月01日 15:20
  • 2174

通过点击按钮实现ViewPager的切换

  • kuangxiaoguo0123
  • kuangxiaoguo0123
  • 2015年10月10日 21:03
  • 7409
这里我们实现的是通过点击按钮来切换ViewPager,就是在ViewPager的底端我们定义一个 LinearLayout布局,在其中放置4个ImageView控件,我们可以通过点击不同的控件来切换V...

ViewPager加载自定义View,按钮也可以控制滑动

  • 2015年06月04日 10:15
  • 1.27MB
  • 下载

Viewpager自动轮播,可修改滑动速度

  • Dovar_66
  • Dovar_66
  • 2016年08月29日 13:22
  • 2203
Viewpager自动轮播,间隔时间5秒: 如果五秒内用户没有手动滑动viewpager,则自动跳转到下一页 /** * 配置viewPager */ private ExecutorSer...

android viewPager滑动速度设置

  • u011467537
  • u011467537
  • 2015年03月28日 17:14
  • 1694
ViewPager 滑动速度设置,并实现点击按钮滑动        使用过ViewPager的童鞋,都会感觉到设置界面滑动挺简单的。但是有时候却满足不了UI设计的要求。      在...

viewpager左右滑动+图片点击切换

  • 2014年01月10日 11:26
  • 3.61MB
  • 下载

Android实战技巧之七:按钮控制ViewPager的左右翻页

为了实现左右翻页的效果,使用了ViewPager,它会很方便的实现左右滑动后翻页。 这时需要自己也加上两个button来实现同样的操作,如何实现呢?网上一篇blog帮了忙啦。 【Android】按钮控...
  • lincyang
  • lincyang
  • 2014年03月08日 20:38
  • 14974

修改ViewPager调用setCurrentItem时,滑屏的速度 ,解决滑动之间切换动画难看

在使用ViewPager的过程中,有需要直接跳转到某一个页面的情况,这个时候就需要用到ViewPager的setCurrentItem方法了,它的意思是跳转到ViewPager的指定页面,但在使用这个...
  • u012770744
  • u012770744
  • 2016年03月11日 15:16
  • 1864

ViewPager setCurrentItem 设置滑动速度

  • yersterday
  • yersterday
  • 2014年07月24日 10:39
  • 1248
例如,当我们用一个按钮来控制ViewPagmViewPager.setCurrentItem(++currPositon);

Android使用ViewPager实现导航页根据情况禁止滑动以及点击切换

前段时间由于项目原因,要做一个导航页面。但有时会需要用到根据某些条件禁止滑动,以及通过按钮点击切换页面的效果。刚好趁现在把这些东西写下来,分享出来。一、ViewPager点击切换因为之前做的那个项目是...
  • JadynAi
  • JadynAi
  • 2016年03月13日 23:55
  • 2226

【解决ViewPager在大屏上滑动不流畅】 设置ViewPager滑动翻页距离

在项目中做了一个ViewPager+Fragment滑动翻页的效果,在模拟器和小米手机上测试也比较正常。但是换到4.7以上屏幕测试的时候发现老是滑动失效。     因为系统默认的滑动策略是当用户滑动超...
  • h3c4lenovo
  • h3c4lenovo
  • 2013年07月20日 11:00
  • 10789
持之以恒
等级: 
3级,点击查看等级说明
访问量:  67.13k
积分:  884
排名:  55.05k

文章分类

文章存档

展开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值