Android实现Banner图片循环轮播
1.实现循环播放多张图片
2.也可手动滑动循环
效果图:
下载好附件中的demo,右键自己项目选择properties,在Java Build Path栏中projicets内点击add,添加引用项目
在AndroidManifest文件中添加权限
1
2
|
<uses-permission android:name=
"android.permission.INTERNET"
/>
<uses-permission android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
|
主界面xml文件代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
android:orientation
=
"vertical"
>
<
fragment
android:id
=
"@+id/fragment_cycle_viewpager_content"
android:name
=
"cn.androiddevelop.cycleviewpager.lib.CycleViewPager"
android:layout_width
=
"match_parent"
android:layout_height
=
"180dip"
/>
<
RelativeLayout
android:layout_width
=
"fill_parent"
android:layout_height
=
"0dip"
android:layout_weight
=
"1"
>
<
TextView
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:layout_centerInParent
=
"true"
android:text
=
"content"
/>
</
RelativeLayout
>
</
LinearLayout
>
|
MainActivity代码,注释讲的很清楚
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
package
com.stevenhu.android.phone.ui;
import
java.util.ArrayList;
import
java.util.List;
import
com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import
com.nostra13.universalimageloader.core.DisplayImageOptions;
import
com.nostra13.universalimageloader.core.ImageLoader;
import
com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import
com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import
com.stevenhu.android.phone.bean.ADInfo;
import
com.stevenhu.android.phone.utils.ViewFactory;
import
android.annotation.SuppressLint;
import
android.app.Activity;
import
android.os.Bundle;
import
android.view.View;
import
android.widget.ImageView;
import
android.widget.Toast;
import
cn.androiddevelop.cycleviewpager.lib.CycleViewPager;
import
cn.androiddevelop.cycleviewpager.lib.CycleViewPager.ImageCycleViewListener;
/**
* 描述:主页
*
* @author 胡笃勇
* @version 2015年5月8日 上午10:47:37
*/
public
class
MainActivity
extends
Activity {
private
List<ImageView> views =
new
ArrayList<ImageView>();
private
List<ADInfo> infos =
new
ArrayList<ADInfo>();
private
CycleViewPager cycleViewPager;
private
String[] imageUrls = {
"http://img0.imgtn.bdimg.com/it/u=2799491813,588820357&fm=21&gp=0.jpg"
,
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.ui_main);
configImageLoader();
initialize();
}
@SuppressLint
(
"NewApi"
)
private
void
initialize() {
cycleViewPager = (CycleViewPager) getFragmentManager()
.findFragmentById(R.id.fragment_cycle_viewpager_content);
for
(
int
i =
0
; i < imageUrls.length; i ++){
ADInfo info =
new
ADInfo();
info.setUrl(imageUrls<i>);
info.setContent(
"图片-->"
+ i );
infos.add(info);
}
// 将最后一个ImageView添加进来
views.add(ViewFactory.getImageView(
this
, infos.get(infos.size() -
1
).getUrl()));
for
(
int
i =
0
; i < infos.size(); i++) {
views.add(ViewFactory.getImageView(
this
, infos.get(i).getUrl()));
}
// 将第一个ImageView添加进来
views.add(ViewFactory.getImageView(
this
, infos.get(
0
).getUrl()));
// 设置循环,在调用setData方法前调用
cycleViewPager.setCycle(
true
);
// 在加载数据前设置是否循环
cycleViewPager.setData(views, infos, mAdCycleViewListener);
//设置轮播
cycleViewPager.setWheel(
true
);
// 设置轮播时间,默认5000ms
cycleViewPager.setTime(
2000
);
//设置圆点指示图标组居中显示,默认靠右
cycleViewPager.setIndicatorCenter();
}
private
ImageCycleViewListener mAdCycleViewListener =
new
ImageCycleViewListener() {
@Override
public
void
onImageClick(ADInfo info,
int
position, View imageView) {
if
(cycleViewPager.isCycle()) {
position = position -
1
;
Toast.makeText(MainActivity.
this
,
"position-->"
+ info.getContent(), Toast.LENGTH_SHORT)
.show();
}
}
};
/**
* 配置ImageLoder
*/
private
void
configImageLoader() {
// 初始化ImageLoader
@SuppressWarnings
(
"deprecation"
)
DisplayImageOptions options =
new
DisplayImageOptions.Builder().showStubImage(R.drawable.icon_stub)
// 设置图片下载期间显示的图片
.showImageForEmptyUri(R.drawable.icon_empty)
// 设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.drawable.icon_error)
// 设置图片加载或解码过程中发生错误显示的图片
.cacheInMemory(
true
)
// 设置下载的图片是否缓存在内存中
.cacheOnDisc(
true
)
// 设置下载的图片是否缓存在SD卡中
// .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片
.build();
// 创建配置过得DisplayImageOption对象
ImageLoaderConfiguration config =
new
ImageLoaderConfiguration.Builder(getApplicationContext()).defaultDisplayImageOptions(options)
.threadPriority(Thread.NORM_PRIORITY -
2
).denyCacheImageMultipleSizesInMemory()
.discCacheFileNameGenerator(
new
Md5FileNameGenerator()).tasksProcessingOrder(QueueProcessingType.LIFO).build();
ImageLoader.getInstance().init(config);
}
}</i>
|
注意事项:
文章只介绍了这个模块中的外部设置方法,如果有想深入研究的可以学习一下demo中的源代码
上面讲在自己项目中添加对这个demo项目的依赖关系,因为demo项目中有的基类已经定义好,无需我们再去重新写一遍,而且复制粘贴到自己项目中会使项目很冗余,所以添加一个依赖关系调用相关的外部方法即可。
Note:本源代码由“极分享”社区创建,添加或者修改,我们会持续优化源代码以提供更好的解决方案,更多详情和支持请前往 finalshares.com 。
本文参考: http://blog.csdn.net/stevenhu_223/article/details/45577781