Android-------使用第三方Banner实现对网络图片的无线轮播

时间:2024-04-09 21:13:48

参考网址:https://github.com/search(很详细)

使用步骤:

1.在build.gradle中加入包,点击右上角的同步:

compile 'com.youth.banner:banner:1.4.9'

2.添加权限到你的 AndroidManifest.xm

<uses-permission android:name="android.permission.INTERNET"> </uses-permission>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

3.在布局文件中添加Banner,可以设置自定义属性

<?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"
    >
<com.youth.banner.Banner
    android:id="@+id/ban"
    android:layout_width="match_parent"
    android:layout_height="250dp">

</com.youth.banner.Banner>

</LinearLayout>

4.写一个图片加载器类并继承ImageLoader
//定义的一个Bannerde 图片加载器,继承ImageLoader
public class BannerImageLoad extends ImageLoader{
     //在该方法内用Glide进行加载图片
    @Override
    public void displayImage(Context context, Object path, ImageView imageView) {
        Glide.with(context).load(path).into(imageView);
    }
}

5.在Activity或者Fragment中配置Banner(这里是在一个Fragment中进行配置的)

public class Fragment1 extends Fragment {
    private Banner ban;
    private String urlpath="http://zkread.com/htnewsroom/articles/tops";
    private Handler hand=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            if(msg.what==1){
                //用Gson解析数据并得到该数据的类
                Gson gson=new Gson();
                News news = gson.fromJson(msg.obj.toString(), News.class);
                //得到要展示的图片和标题的类的集合并遍历
                List<News.DataBean> data = news.getData();
                //新建一个存放图片的集合和标题的集合
                ArrayList<String> images=new ArrayList<>();
                ArrayList<String> title=new ArrayList<>();
                //遍历完后把相应的数据添加到集合中
                for (News.DataBean bean:data){
                    images.add(bean.getImgSrc());
                    title.add(bean.getTitle());
                }
                //将图片和标题设置到Banner中
                ban.setImages(images);
                ban.setBannerTitles(title);
                //开启Banner
                ban.start();
            }
        }
    };
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment1, container, false);
        ban=(Banner)view.findViewById(R.id.ban);
        //设置Banner
        initview();
        //加载网络数据
        loaddata();
        return view;
    }
    private void loaddata() {
     new Thread(){
         @Override
         public void run() {

 //HttpUrl为一个写好的通过HttpUrlConnection对网络进行请求的类(里面有get和post请求)

 String str = HttpUrl.getUrlConnect(urlpath);
             Message msg=new Message();
             msg.what=1;
             msg.obj=str;
             hand.sendMessage(msg);
         }
     }.start();
    }
    private void initview() {
     //设置图片加载器
        BannerImageLoad bil=new BannerImageLoad();
        ban.setImageLoader(bil);
        //设置显示样式(显示数字指示器和标题)
        ban.setBannerStyle(BannerConfig.NUM_INDICATOR_TITLE);
       /* 
 //设置banner样式
    banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE);
    //设置图片加载器
    banner.setImageLoader(new GlideImageLoader());
    //设置图片集合
    banner.setImages(images);
    //设置banner动画效果
    banner.setBannerAnimation(Transformer.DepthPage);
    //设置标题集合(当banner样式有显示title时)
    banner.setBannerTitles(titles);
    //设置自动轮播,默认为true
    banner.isAutoPlay(true);
    //设置轮播时间
    banner.setDelayTime(1500);
    //设置指示器位置(当banner模式中有指示器时)
    banner.setIndicatorGravity(BannerConfig.CENTER);
*/ }}
Android-------使用第三方Banner实现对网络图片的无线轮播