要想达到加载网络图片实现无限轮播的效果,首先,你需要定义一个比较合理的布局
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="200dp">
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="200dp"/>
<LinearLayout
android:id="@+id/linear"
android:orientation="horizontal"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
以上就是一个相对布局中用了一个ViewPager用来加载图片,靠近相对布局控件的底部有一个相对布局用来存储轮播指示器。这些工作做好了之后,就需要设置联网权限和添加一些图片加载框架了 ,在这里不一一说明。
我这里找了三张网络图片:
List<String> imageList= Arrays.asList("http://cdn.duitang.com/uploads/blog/201308/18/20130818150526_Ru2Bk.thumb.600_0.png",
"http://www.bkill.com/u/info_img/2012-09/02/2012083116140522302.jpg",
"http://www.it165.net/uploadfile/2011/1218/20111218070928328.jpg");
还需要给vp设置一个适配器
//ViewPager的适配器类
public class MyPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
//数量为2147483647
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) {
container.removeView((View) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView image = new ImageView(MainActivity.this);
ImageLoader.getInstance().displayImage(imageList.get(position % imageList.size()),image,MyApplication.getOptions());
container.addView(image);
return image;
}
}
因为下文要利用线程发送空消息,因此还需要定义一个handler
//定义Handler
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
vp.setCurrentItem(page);
}
};
接下来设置轮播方法
private void autoplay() {
new Thread(){
@Override
public void run() {
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//增加图片下标玛
page++;
//发送空消息
handler.sendEmptyMessage(0);
}
}
}.start();
}
//加载图片的方法
public void initView(){
vp.setAdapter(new MyPagerAdapter());
linear = (LinearLayout)findViewById(R.id.linear);
for (int i = 0; i<imageList.size();i++){
View doView = new View(this);
//小圆点的大小
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(30,30);
//小圆点左边距和右边距
params.rightMargin = 10;
params.leftMargin = 10;
//加载小圆点到视图中
doView.setLayoutParams(params);
//当显示的图片的下标和i相等时,显示选中状态
if(i == 0){
doView.setBackgroundResource(R.drawable.shape_select);
//否则。
}else {
doView.setBackgroundResource(R.drawable.select_normal);
}
//把布局加载到linearlayouot
linear.addView(doView);
}
vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
//图片改变后,让小圆点改变为当前下标状态
linear.getChildAt(position % imageList.size()).setBackgroundResource(R.drawable.shape_select);
//其他的改变为默认
linear.getChildAt(oldPositon % imageList.size()).setBackgroundResource(R.drawable.select_normal);
//将当前下标赋给之前的下标
oldPositon = position;
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
做完这些之后,在activity的相关方法中调用一下即可。