图片轮播ViewPager

本文介绍了一种基于Android平台的图片轮播器实现方案,包括使用Universal Image Loader加载网络图片的方法,以及如何创建无限循环的图片轮播效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于项目经常有些地方需要图片轮播,像欢迎页,广告页,等。


使用:

若应用网络图片则需要自己下载universal-image-loader.jar

/*this:activity
*list: 图片url的集合 ArrayList<String>
*linearLayout:用来显示小圆点的布局容器。linearLayout
viewPager:ViewPager
*/
ArrayList<String> list = new ArrayList<>;
LinearLayout linearLayout = findViewById(R.id.linearLyaout):
ViewPager viewPager = findViewById(R.id.viewPager);
list.add("http://img1.3lian.com/2015/w7/85/d/101.jpg");
list.add("http://img1.3lian.com/2015/w7/85/d/101.jpg");
list.add("http://img1.3lian.com/2015/w7/85/d/101.jpg");
list.add("http://img1.3lian.com/2015/w7/85/d/101.jpg");
ViewPagerManager viewPagerManager = new ViewPagerManager(this,list,linearLayout,viewPager);
viewPagerManager.setLooping(true);//true:无限循环 false:当轮播到最后一个图片时停止轮播

源代码:

package com.lyt.project.view;

import android.content.Context;
import android.graphics.Color;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

import java.util.ArrayList;

/**
*
* 图片轮播器
* 使用方法 直接匹配构造函数
* Created by 李允特 on 2016/7/19.
*/
public class ViewPagerManager {
Context context;
private LinearLayout layout;
private ViewPager viewPager;
private ArrayList<View> views;
private MyPagerAdapter pageradapter;
private int currentitem = 0;
private int [] imageids;
private Runnable pagerRunable;
ArrayList<String> stringArrayList;
boolean isLooping = true;

/*
* imagesids :图片资源
* layout:小圆点所在的布局
* */
public ViewPagerManager(Context context, int[] imagesids, LinearLayout layout, ViewPager viewPager){
this.context = context;
this.layout = layout;
this.viewPager = viewPager;
views = new ArrayList<>();
this.imageids = imagesids;
initView();
initData();
}
/*
* stringArrayList :图片资源
* layout:小圆点所在的布局
* */
public ViewPagerManager(Context context, ArrayList<String> stringArrayList, LinearLayout layout, ViewPager viewPager){
this.context = context;
this.layout = layout;
this.viewPager = viewPager;
views = new ArrayList<>();
ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(context);
ImageLoader.getInstance().init(configuration);
this.stringArrayList = stringArrayList;
initView();
initData();
}

private void initView() {
// layout = (LinearLayout) view.findViewById(R.id.layout);
/*
* 对小圆点的layout布局进行设置
* */
layout.setOrientation(LinearLayout.HORIZONTAL);
layout.setGravity(Gravity.CENTER);
// viewPager = (ViewPager)view.findViewById(R.id.viewpager);
Log.e("liyunte", "initView()");
}

private void initData() {
Log.e("liyunte", "initData()");
/*
* 判断是否是网络上的图片url并保存在views集合里,且初始化小圆点并添加到layout布局中
* */
if (stringArrayList==null) {
for (int i = 0; i < imageids.length; i++) {
views.add(IdtoViews(imageids[i]));
if (i == currentitem) {
layout.addView(roundview(Color.WHITE, 7));
} else {
layout.addView(roundview(Color.GRAY, 5));
}
}
}else {
for (int i = 0; i < stringArrayList.size(); i++) {
views.add(IdtoViews(stringArrayList.get(i)));
if (i == currentitem) {
layout.addView(roundview(Color.WHITE, 7));
} else {
layout.addView(roundview(Color.GRAY, 5));
}
}
}
pageradapter = new MyPagerAdapter(views);
viewPager.setAdapter(pageradapter);
/*
* viewpager设置监听
* */
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {
currentitem = position;//将当前的位置赋值给current用来无限循环处理
setRoundviewColor();//更新小圆点颜色

}

@Override
public void onPageScrollStateChanged(int state) {

}
});
/*
* 无限循环的线程
* */
pagerRunable = new Runnable() {
@Override
public void run() {
if (currentitem==views.size()-1){
if (isLooping){
currentitem=-1;
}else {
viewPager.setCurrentItem(currentitem);
return;
}
}
currentitem++;
viewPager.setCurrentItem(currentitem);
viewPager.postDelayed(pagerRunable,2000);
}
};
viewPager.postDelayed(pagerRunable, 1000);

}
/*
* 控制是否无限轮循
* */
public void setLooping(boolean isLooping){

this.isLooping = isLooping;
}
/*
* 显示图片
* */
public View IdtoViews(int id){
ImageView imageView = new ImageView(context);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setImageResource(id);
return imageView;
}
/*
* 根据InamgeLoader显示图片
* */
public View IdtoViews(String tr){
ImageView imageView = new ImageView(context);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
//imageView.setImageResource(id);
ImageLoader.getInstance().displayImage(tr,imageView);
return imageView;
}
/*
* 处理小圆点
* */
public View roundview(int color,int height){
View view = new View(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(12,height);
params.setMargins(10,0,0,0);//设置左边margin为10
view.setLayoutParams(params);
view.setBackgroundColor(color);
return view;
}
public void setRoundviewColor(){
layout.removeAllViews();
for (int i = 0;i<views.size();i++){
if (i == currentitem){
layout.addView(roundview(Color.WHITE, 7));
}else {
layout.addView(roundview(Color.GRAY, 5));
}
}
}
/*
* adapter
* */
class MyPagerAdapter extends PagerAdapter {
private ArrayList<View> list;
public MyPagerAdapter(ArrayList<View> views) {
list = views;
}


@Override
public int getCount() {
return list.size();
}

@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}


@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(list.get(position));
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(list.get(position));
return list.get(position);
}
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值