六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 55|回复: 0

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

[复制链接]

升级  21.33%

82

主题

82

主题

82

主题

举人

Rank: 3Rank: 3

积分
264
 楼主| 发表于 2013-1-14 17:47:07 | 显示全部楼层 |阅读模式
第一个界面图:
[img]

[/img]

滑动过程中效果图:
[img]

[/img]

最后一个界面图:
[img]

[/img]

主Activity:
package blog.csdn.net.liyulei316686082;import java.lang.reflect.Field;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.opengl.Visibility;import android.os.Bundle;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.view.animation.AccelerateInterpolator;import android.widget.Button;import android.widget.Toast;public class ViewPagerDemoActivity extends Activity {    /** Called when the activity is first created. */private ViewPager mViewPager = null;private Button mLeft = null;private Button mRight = null;private static final int PAGER_NUM = 10;//10个页面private int mCurrentViewID = 0;         //当前页面private int mMyDuration = 100;          //持续时间private FixedSpeedScroller mScroller;private YLeiPageAdapter mYLeiPageAdapter = null;private List<View> mListViews;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                                       mViewPager = (ViewPager)findViewById(R.id.viewpager);        mLeft = (Button)findViewById(R.id.left);         mRight = (Button)findViewById(R.id.right);         mLeft.setOnClickListener(mOnClickListener);mRight.setOnClickListener(mOnClickListener);mLeft.setVisibility(View.INVISIBLE);mListViews = new ArrayList<View>();for(int i= 1; i<= PAGER_NUM; i++){MyPagerView view = new MyPagerView(this, i);mListViews.add(view);}mYLeiPageAdapter = new YLeiPageAdapter(this, mListViews);mViewPager.setAdapter(mYLeiPageAdapter);mViewPager.setOnPageChangeListener(mOnPageChangeListener);/*主要代码段*/try {             Field mField = ViewPager.class.getDeclaredField("mScroller");             mField.setAccessible(true);    //设置加速度 ,通过改变FixedSpeedScroller这个类中的mDuration来改变动画时间(如mScroller.setmDuration(mMyDuration);)  mScroller = new FixedSpeedScroller(mViewPager.getContext(), new AccelerateInterpolator());         mField.set(mViewPager, mScroller);         } catch (Exception e) {         e.printStackTrace();}     }        private OnClickListener mOnClickListener = new OnClickListener(){@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.left:if(mCurrentViewID > 0){mCurrentViewID--;mViewPager.setCurrentItem(mCurrentViewID, true);Toast.makeText(getApplicationContext(), mCurrentViewID+"", 0).show();mMyDuration -= 100;mScroller.setmDuration(1000);Log.i("TAG", "mCurrentViewID==="+mCurrentViewID);}break;case R.id.right:if(mCurrentViewID < PAGER_NUM-1){mCurrentViewID++;mViewPager.setCurrentItem(mCurrentViewID, true);mMyDuration += 100;mScroller.setmDuration(1000);Log.i("TAG", "mCurrentViewID==="+mCurrentViewID);}break;}}};private OnPageChangeListener mOnPageChangeListener = new OnPageChangeListener(){@Overridepublic void onPageScrollStateChanged(int arg0) {// TODO Auto-generated method stub}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {// TODO Auto-generated method stub}@Overridepublic void onPageSelected(int currentID) {// TODO Auto-generated method stub//mCurrentViewID = currentID;if(currentID==0){mLeft.setVisibility(View.INVISIBLE);}if(currentID!=0){mLeft.setVisibility(View.VISIBLE);}if(currentID==mListViews.size()-1){mRight.setVisibility(View.INVISIBLE);}if(currentID!=mListViews.size()-1){mRight.setVisibility(View.VISIBLE);}}};}

同志们,sorry,sorry,我的错,请吧//mCurrentViewID = currentID;   这个注释放开,要不手势的界面与Button的操控就不同步了

修改按钮位置(位于屏幕两边)效果图:
[img]

[/img]
这样的效果,请下第二个 rar
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表