图片轮播的帮助类
public class BannerHelper {
private static int TIMES=3000;
private static boolean flag=false;
private ViewPager viewPager;
public void setUp(ViewPager viewPager){
this.viewPager = viewPager;
start();
run();
}
private void run(){
if(viewPager==null){
return;
}
ThreadUtil.runOnBackThread(new Runnable() {
@Override
public void run() {
while (true){
if(flag){
handler.sendEmptyMessageDelayed(1,TIMES);
flag=false;
}
}
}
});
}
/**
* 开始轮播
*/
public void start(){
//清空消息队列中消息
if (handler.hasMessages(1)){
handler.removeMessages(1);
}
flag=true;
}
/**
* 停止轮播
*/
public void stop(){
//清空消息队列中消息
if (handler.hasMessages(1)){
handler.removeMessages(1);
}
flag=false;
}
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
viewPager.setCurrentItem(viewPager.getCurrentItem()+1);
flag=true;
}
};
}
viewpager的适配器
public class BannerPageAdapter extends PagerAdapter{
private final List<ImageView> imageViews;
public BannerPageAdapter(List<ImageView> imageViews) {
this.imageViews = imageViews;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
//对ViewPager页号求模取出View列表中要显示的项
position %= imageViews.size();
if (position<0){
position = imageViews.size()+position;
}
ImageView view = imageViews.get(position);
//如果View已经在之前添加到了一个父组件,则必须先remove,否则会抛出IllegalStateException。
ViewParent vp =view.getParent();
if (vp!=null){
ViewGroup parent = (ViewGroup)vp;
parent.removeView(view);
}
container.addView(view);
//add listeners here if necessary
return view;
}
在activity中给viewpager设置监听
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
bannerHelper.start();
position %= images.length;
for (int i = 0; i < points.size(); i++) {
if (i == position) {
points.get(i).setBackgroundResource(R.color.appBlue);
} else {
points.get(i).setBackgroundResource(R.color.appWrite);
}
}
LogUtil.v(TAG, "position:" + position);
}
@Override
public void onPageScrollStateChanged(int state) {
if (state == ViewPager.SCROLL_STATE_DRAGGING) {
//第1个执行, state = 1
bannerHelper.stop();
} else if (state == ViewPager.SCROLL_STATE_SETTLING) {
//第3个执行,手放开后, state = 2
} else if (state == ViewPager.SCROLL_STATE_IDLE) {
bannerHelper.start();
//第6个执行,结束, state = 0
}
}
});
mainToolBar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
drawerLayout.openDrawer(Gravity.START);
}
});
给viewpager设置数据 并且加上指示器
private void initBanner() {
List datas = new ArrayList();
for (int i = 0; i < images.length; i++) {
ImageView e = new ImageView(this);
Glide.with(this).load(images[i]).centerCrop().into(e);
datas.add(e);
TextView textView = new TextView(this);
textView.setBackgroundResource(R.color.appWrite);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(20, 8, 1);
params.setMargins(10, 0, 10, 0);
textView.setLayoutParams(params);
linearPoint.addView(textView);
points.add(textView);
}
bannerHelper = new BannerHelper();
viewPager.setAdapter(new BannerPageAdapter(datas));
viewPager.setCurrentItem(Integer.MAX_VALUE / 2 + (datas.size() - datas.size() % 2) / 2 - 1);
points.get(0).setBackgroundResource(R.color.appBlue);
bannerHelper.setUp(viewPager);
}
布局
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="400px">
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:id="@+id/linear_point"
android:layout_centerHorizontal="true"
android:layout_marginBottom="20px"
android:layout_alignParentBottom="true"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</LinearLayout>
</RelativeLayout>