以前一直没有时间去研究viewpager的自动滑动,每次都是去网上找,各种例子都有,最近终于闲下来,决定自己研究下,直接使用的ScheduledExecutorService,其余的不解释,我就是喜欢用这个,我就是觉得他好用,没有为什么,其他的也不考虑
直接上代码
package com.demo.neu.xianzhi.activity;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import com.demo.neu.R;
import com.demo.neu.xianzhi.adapter.ViewPagerAdapter;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* Created by 李博 on 2016/10/20.
*/
public class ViewPagerAcivity extends Activity {
//下标
private int currentItem = 0;
//图片集合
private List<View> images;
//适配器
private ViewPagerAdapter adapter;
//点集合
private List<View> dots;
private ScheduledExecutorService scheduledExecutorService;
private ViewPager mViewpager;
private View view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
view = LayoutInflater.from(this).inflate(R.layout.home_layout, null);
setContentView(view);
initView();
setPageChangeListener();
}
protected void initView() {
mViewpager = (ViewPager) view.findViewById(R.id.mViewPager);
dots = new ArrayList<>();
images = new ArrayList<>();
dots.add(view.findViewById(R.id.home_iv_dian1));
dots.add(view.findViewById(R.id.home_iv_dian2));
dots.add(view.findViewById(R.id.home_iv_dian3));
dots.add(view.findViewById(R.id.home_iv_dian4));
setViewPagerDatas();
adapter = new ViewPagerAdapter(images, this);
mViewpager.setAdapter(adapter);
}
/**
* 获取viewpager的数据
*/
private void setViewPagerDatas() {
}
/**
* viewpager的滑动监听
*/
private void setPageChangeListener() {
mViewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
int oldPosition = 0;
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
currentItem = position;
dots.get(oldPosition).setBackgroundResource(R.mipmap.home_dian2);
dots.get(position).setBackgroundResource(R.mipmap.home_dian1);
oldPosition = position;
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
@Override
public void onStart() {
super.onStart();
//建立一个单独的线程
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
/**
* 声明一个线程 设置5S之后切换图片
* 执行线程
* 初始化延时
* 两次开始执行最小间隔时间
* 计时单位
*/
scheduledExecutorService.scheduleAtFixedRate(
new ScrollTask(),
0,
5,
TimeUnit.SECONDS);
}
@Override
public void onStop() {
scheduledExecutorService.shutdown();
super.onStop();
}
//滑动线程
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//是否有滑动动画 true有滑动动画 默认是true
mViewpager.setCurrentItem(currentItem, false);
}
};
private class ScrollTask implements Runnable {
@Override
public void run() {
currentItem = (currentItem + 1) % images.size();
handler.obtainMessage().sendToTarget();
}
}
}
适配器
package com.demo.neu.xianzhi.adapter;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;
/**
* Created by 李博 on 2016/9/29.
*/
public class ViewPagerAdapter extends PagerAdapter {
private List<View> images;
private Context context;
public ViewPagerAdapter(List<View> images, Context context) {
this.images = images;
this.context = context;
}
@Override
public int getCount() {
return images.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(images.get(position), 0);
return images.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(images.get(position));
}
}
就这些,不明白的可以留言,至于解释嘛,注释已经写的很明白了