更改viewpager自动滑动的速度

布局main.xml:

 

[html] view plain copy

  1. <?xml version="1.0" encoding="utf-8"?>  

  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

  3.     android:layout_width="fill_parent"  

  4.     android:layout_height="fill_parent"  

  5.     android:orientation="vertical" >  

  6.   

  7.     <android.support.v4.view.ViewPager  

  8.         android:id="@+id/viewpager"  

  9.         android:layout_width="fill_parent"  

  10.         android:layout_height="400dip" />  

  11.   

  12.     <LinearLayout  

  13.         android:layout_width="wrap_content"  

  14.         android:layout_height="wrap_content"  

  15.         android:orientation="horizontal" >  

  16.        <Button  

  17.             android:id="@+id/left"  

  18.             android:layout_width="wrap_content"  

  19.             android:layout_height="wrap_content"  

  20.             android:text="←"  

  21.             android:textSize="25dip" />  

  22.         <Button  

  23.             android:id="@+id/right"  

  24.             android:layout_width="wrap_content"  

  25.             android:layout_height="wrap_content"  

  26.             android:layout_marginRight="100dip"  

  27.             android:text="→"  

  28.             android:textSize="25dip" />  

  29.     </LinearLayout>  

  30.   

  31. </LinearLayout>  


ViewPagerDemoActivity类:

[html] view plain copy

  1. package blog.csdn.net.liyulei316686082;  

  2.   

  3. import java.lang.reflect.Field;  

  4. import java.util.ArrayList;  

  5. import java.util.List;  

  6.   

  7. import android.app.Activity;  

  8. import android.os.Bundle;  

  9. import android.support.v4.view.ViewPager;  

  10. import android.support.v4.view.ViewPager.OnPageChangeListener;  

  11. import android.view.View;  

  12. import android.view.View.OnClickListener;  

  13. import android.view.animation.AccelerateInterpolator;  

  14. import android.widget.Button;  

  15.   

  16. public class ViewPagerDemoActivity extends Activity {  

  17.     /** Called when the activity is first created. */  

  18.    

  19.  private ViewPager mViewPager = null;  

  20.  private Button mLeft = null;  

  21.  private Button mRight = null;  

  22.    

  23.  private static final int PAGER_NUM = 10;//10个页面  

  24.  private int mCurrentViewID = 0;         //当前页面  

  25.  private int mMyDuration = 100;          //持续时间  

  26.    

  27.  private FixedSpeedScroller mScroller;  

  28.  private YLeiPageAdapter mYLeiPageAdapter = null;  

  29.  private List<View> mListViews;  

  30.    

  31.     @Override  

  32.     public void onCreate(Bundle savedInstanceState) {  

  33.         super.onCreate(savedInstanceState);  

  34.         setContentView(R.layout.main);  

  35.           

  36.         mViewPager = (ViewPager)findViewById(R.id.viewpager);  

  37.         mLeft = (Button)findViewById(R.id.left);   

  38.         mRight = (Button)findViewById(R.id.right);   

  39.         mLeft.setOnClickListener(mOnClickListener);  

  40.   mRight.setOnClickListener(mOnClickListener);  

  41.     

  42.   mListViews = new ArrayList<View>();  

  43.   for(int i1; i<= PAGER_NUM; i++){  

  44.    MyPagerView view = new MyPagerView(this, i);  

  45.    mListViews.add(view);  

  46.   }  

  47.   mYLeiPageAdapter = new YLeiPageAdapter(this, mListViews);  

  48.   mViewPager.setAdapter(mYLeiPageAdapter);  

  49.   mViewPager.setOnPageChangeListener(mOnPageChangeListener);  

  50.     

  51.   /*<span style="color:#ff0000;">主要代码段</span>*/  

  52.   try {               

  53.    Field mField = ViewPager.class.getDeclaredField("mScroller");               

  54.    mField.setAccessible(true);     

  55.     //<span style="color:#ff0000;">设置加速度 ,通过改变FixedSpeedScroller这个类中的mDuration来改变动画时间(如mScroller.setmDuration(mMyDuration);)   

  56. </span>   mScroller = new FixedSpeedScroller(mViewPager.getContext(), new AccelerateInterpolator());          

  57.    mField.set(mViewPager, mScroller);           

  58.    } catch (Exception e) {           

  59.     e.printStackTrace();  

  60.    }   

  61.     }  

  62.       

  63.     private OnClickListener mOnClickListener = new OnClickListener(){  

  64.   @Override  

  65.   public void onClick(View v) {  

  66.    switch (v.getId()){  

  67.    case R.id.left:  

  68.     if(mCurrentViewID != 0){  

  69.      mCurrentViewID--;  

  70.      mViewPager.setCurrentItem(mCurrentViewID, true);  

  71.     }  

  72.     mMyDuration -100;  

  73.     mScroller.setmDuration(mMyDuration);  

  74.     break;  

  75.    case R.id.right:  

  76.     if(mCurrentViewID != PAGER_NUM-1){  

  77.      mCurrentViewID++;  

  78.      mViewPager.setCurrentItem(mCurrentViewID, true);  

  79.     }  

  80.     mMyDuration += 100;  

  81.     mScroller.setmDuration(mMyDuration);  

  82.     break;  

  83.    }  

  84.      

  85.   }};  

  86.     

  87.   private OnPageChangeListener mOnPageChangeListener = new OnPageChangeListener(){  

  88.   

  89.    @Override  

  90.    public void onPageScrollStateChanged(int arg0) {  

  91.     // TODO Auto-generated method stub  

  92.    }  

  93.   

  94.    @Override  

  95.    public void onPageScrolled(int arg0, float arg1, int arg2) {  

  96.     // TODO Auto-generated method stub  

  97.    }  

  98.    @Override  

  99.    public void onPageSelected(int currentID) {  

  100.     // TODO Auto-generated method stub  

  101.     mCurrentViewID = currentID;  

  102.    }};  

  103. }  


 

 

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.   



转载于:https://my.oschina.net/u/2531348/blog/609000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值