简述:
通过timer来控制viewpager 自动切换.
使用到的控件:ViewPager Timer TimerTask
1.实现布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id = "@+id/viewpager"
android:layout_width = "match_parent"
android:layout_height = "match_parent"/>
</LinearLayout>
2.activity的实现
<pre name="code" class="java"> viewpager.setAdapter(new MyFragmentAdapter(getSupportFragmentManager()));
viewpager.setCurrentItem(1);
page = viewpager.getCurrentItem();
viewpager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
pageIndex = arg0;
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
/**
* arg0 0:空闲 1:滑动中 2:滑动完成
* */
@Override
public void onPageScrollStateChanged(int arg0) {
if(arg0 == 0 && !isTimeRun){
setCurrentItem();
startTime();
}else if(arg0 ==1 && isTimeRun){
stopTime();
}
}
});
}
/**
* 设置当前选中的page
* */
private void setCurrentItem() {
page = viewpager.getCurrentItem();
if(page == 0){
pageIndex = 3;
}
if(page == 4){
pageIndex = 1;
}
viewpager.setCurrentItem(pageIndex,false);
}
3.开启一个定时任务
/**
* 开启一个定时任务
* */
private void startTime(){
isTimeRun = true;
timer = new Timer();
task = new TimerTask() {
@Override
public void run() {
pageIndex++;
//发送handler 去外部执行
Message msg = Message.obtain();
msg.what = 0;
handler.sendMessage(msg);
}
};
timer.schedule(task, 2 * 1000, 2 * 1000);// 这里设置自动切换的时间,单位是毫秒,2*1000表示2秒
}
/**
* 创建一个handler 去处理消息队列
*
* */
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
if(msg.what == 0){
setCurrentItem();
}
}
};
/**
* 停止计时器
* */
private void stopTime(){
isTimeRun = false;
task.cancel();
}
4.viewpager的适配器的实现
/**
* 创建viewpager的适配器
*
* */
private class MyFragmentAdapter extends FragmentPagerAdapter{
private ArrayList<Fragment> list;
public MyFragmentAdapter(FragmentManager fm) {
super(fm);
list = new ArrayList<Fragment>();
list.add(new FragmentOne2());
list.add(new FragmentOne());
list.add(new FragmentOne1());
list.add(new FragmentOne2());
list.add(new FragmentOne());
}
@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
return list.get(arg0);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
}