您的位置:首页 > 其它

无限轮播的实现

2016-06-28 19:25 225 查看
不少软件的主页都会有一个Banner,通俗的说就是广告条,可以无限轮播广告图片,那么是怎么实现的呢?

MainActivity代码如下:
package com.bawei.rollview;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;

import com.bawei.rollview.adapter.MyPageAdapter;

public class MainActivity extends Activity {

private ViewPager vp;
private LinearLayout ll;
private String[] ImageUrl=new String[]{
"http://169.254.25.59:8080/a.bmp",
"http://169.254.25.59:8080/b.bmp",
"http://169.254.25.59:8080/c.bmp",
"http://169.254.25.59:8080/d.bmp",
"http://169.254.25.59:8080/e.bmp"
};
private ArrayList<ImageView> imageList;

Handler handler=new Handler(){
public void handleMessage(android.os.Message msg) {
if (msg.what==0) {
//拿到当前的页面索引值
int currentItem = vp.getCurrentItem();
currentItem++;
//设置索引值
vp.setCurrentItem(currentItem);

handler.sendEmptyMessageDelayed(0, 3000);
}
};
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
vp = (ViewPager) findViewById(R.id.vp);
ll = (LinearLayout) findViewById(R.id.ll);

//设置适配器
vp.setAdapter(new MyPageAdapter(this,ImageUrl));

//初始化小圆点
initDots();

//设置当前页面的一个条目
vp.setCurrentItem(imageList.size()*3000);

//为vp设置监听
vp.setOnPageChangeListener(new OnPageChangeListener() {

@Override
public void onPageSelected(int position) {
for (int i = 0; i < imageList.size(); i++) {
if (i==position%ImageUrl.length) {
imageList.get(i).setImageResource(R.drawable.focus);
}else{
imageList.get(i).setImageResource(R.drawable.defaults);
}
}
}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {

}

@Override
public void onPageScrollStateChanged(int arg0) {

}
});

handler.sendEmptyMessageDelayed(0, 3000);
}

/**
* 初始化小圆点
*/
private void initDots() {
imageList = new ArrayList<ImageView>();
imageList.clear();//清空集合中的元素
ll.removeAllViews();//移除布局中的控件
for (int i = 0; i < ImageUrl.length; i++) {
//创建一个ImageView控件
ImageView imageView = new ImageView(this);
if (i==0) {
//点亮的小圆点
imageView.setImageResource(R.drawable.focus);
}else{
//默认的小圆点
imageView.setImageResource(R.drawable.defaults);
}
LayoutParams params=new LayoutParams(20, 20);
params.setMargins(5, 0, 5, 0);
//将圆点添加到集合中
imageList.add(imageView);
//将圆点添加到布局中
ll.addView(imageView,params);
}
}
}
下面是adapter的代码:

package com.bawei.rollview.adapter;

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.lidroid.xutils.BitmapUtils;

public class MyPageAdapter extends PagerAdapter {
private Context context;
private String[] ImageUrl;

public MyPageAdapter(Context context, String[] imageUrl) {
super();
this.context = context;
ImageUrl = imageUrl;
}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}

@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView image = new ImageView(context);

BitmapUtils bitmap = new BitmapUtils(context);

bitmap.display(image, ImageUrl[position%ImageUrl.length]);

container.addView(image);

return image;
}
@Override
public void destroyItem(ViewGroup container, int position,
Object object) {
container.removeView((View)object);
}
}


完成以上代码就可以实现无限轮播图了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: