Android实现Banner图片循环轮播

极分享vip 发布于 2016/01/12 12:25
阅读 7K+
收藏 5
功能:
   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"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    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",
            "http://img3.imgtn.bdimg.com/it/u=2414756802,531263205&fm=21&gp=0.jpg",
            "http://img2.imgtn.bdimg.com/it/u=2280771936,3888134874&fm=21&gp=0.jpg",
            "http://img3.imgtn.bdimg.com/it/u=2327585548,1525749689&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
加载中
0
极分享vip
极分享vip
希望对大家有所帮助
0
thanatosx
thanatosx
赞赞赞
极分享vip
极分享vip
多谢支持
0
蓝水晶飞机
蓝水晶飞机
哈哈哈,以前自己就用ViewPager来写,加一个Timer来做定时播放。
极分享vip
极分享vip
看来 经常有人反复造轮子啊 要多多交流啊
0
君临天下-龙
君临天下-龙
刚好需要 谢谢了
0
Ryane
Ryane

可以去看一下这个轮播图,功能很全,使用也很方便:https://github.com/ryanlijianchang/AdPlayBanne

返回顶部
顶部