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

第一个界面图:
[img]
[img]http://dl.iteye.com/upload/attachment/0077/1321/7693a17c-92ac-31eb-a720-2a31f8c5d77d.png[/img]
[/img]

滑动过程中效果图:
[img]
[img]http://dl.iteye.com/upload/attachment/0077/1323/8f2aa5e2-ee4b-3b15-b52a-2aeb4bc5cdd3.png[/img]
[/img]

最后一个界面图:
[img]
[img]http://dl.iteye.com/upload/attachment/0077/1325/dd86799e-f79a-35ff-a99b-6fb27bcdcdc0.png[/img]
[/img]

主Activity:
package blog.youkuaiyun.com.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(){
@Override
public 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(){

@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public 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的操控就不同步了 :shock: :shock: :shock: :shock: :shock: :shock:

修改按钮位置(位于屏幕两边)效果图:
[img]
[img]http://dl.iteye.com/upload/attachment/0077/1396/1bb1eb08-49df-3d84-b5ca-e901e7ebf2ab.png[/img]
[/img]
这样的效果,请下第二个 rar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值