Banner 自动无限轮播(优化版)

来源:互联网 发布:淘宝投诉盗图原图太大 编辑:程序博客网 时间:2024/06/08 16:33

例题:Banner 实现图片轮播

 

build.gradle中加入(加在最下面):compile 'com.youth.banner:banner:1.4.10'

添加之后需要点击右上角的   Sync Now   编译一下

============================================

添加权限:<uses-permission android:name="android.permission.INTERNET"/>

<application/>在这个控件里加入属性:android:name=".MyApp"=================================================================libs文件夹下加入jar包:   gson   和   universal-image-loader==================================================================布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.shenhuiran_12121.MainActivity">    <com.youth.banner.Banner        android:id="@+id/mybanner"        android:layout_width="match_parent"        android:layout_height="200dp"/></RelativeLayout>
====================================================================主要方法:
import android.os.AsyncTask;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import com.google.gson.Gson;import com.youth.banner.Banner;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    private Banner myBanner;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        myBanner = findViewById(R.id.mybanner);        MyTask myTask=new MyTask();        myTask.execute("http://www.93.gov.cn/93app/data.do?channelId=0&startNum=0");    }    private void setBanner(List<String> urls) {        //1.设置一个图片加载器        myBanner.setImageLoader(new MyBannerLoader());        //2.设置图片集合List<String> lists        myBanner.setImages(urls);        //3.启动        myBanner.start();    }    class MyTask extends AsyncTask<String,Void,String> {        @Override        protected String doInBackground(String... strings) {            StringBuilder builder=new StringBuilder();            //1.根据url创建URL            try {                URL url=new URL(strings[0]);                //2.打开连接                HttpURLConnection conn =(HttpURLConnection) url.openConnection();                //3.设置                conn.setRequestMethod("GET");                conn.setConnectTimeout(5000);                conn.setReadTimeout(5000);                //4.判断结果码                if(conn.getResponseCode()==200){                    //5.获取数据                    InputStream inputStream = conn.getInputStream();                    BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));                    String str;                    while ((str=reader.readLine())!=null){                        builder.append(str);                    }                }            } catch (MalformedURLException e) {                e.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            }            Log.d("zzz",builder.toString());            return builder.toString();        }        //async 执行完 doinbackground..后 马上来执行onPostExecute方法        @Override        protected void onPostExecute(String s) {            Gson gson=new Gson();            Result result = gson.fromJson(s, Result.class);            //图片的url地址            List<String> urls=new ArrayList<String>();            List<Result.DataScrollBean> dataScroll = result.getDataScroll();            for(int i=0;i<dataScroll.size();i++){                urls.add("http://www.93.gov.cn"+dataScroll.get(i).getIMAGEURL());            }            setBanner(urls);            //更新listview//            MyAdapter adapter=new MyAdapter(result.getData().getPc_feed_focus(),MainActivity.this);//            listView.setAdapter(adapter);        }    }}============================================================================
Result方法:
public class Result {json解析类}
============================================================================
MyBannerLoader 方法:
import android.content.Context;import android.graphics.Bitmap;import android.widget.ImageView;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.assist.ImageScaleType;import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;import com.youth.banner.loader.ImageLoader;/** * Created by jane on 2017/12/12. *///注意:继承的是banner.ImageLoaderpublic class MyBannerLoader extends ImageLoader {    @Override    public void displayImage(Context context, Object path, ImageView imageView) {        DisplayImageOptions options=new DisplayImageOptions.Builder()                .cacheInMemory(true)//使用内存缓存                .cacheOnDisk(true)//使用磁盘缓存                .showImageOnLoading(R.mipmap.ic_launcher)//设置正在下载的图片                .showImageForEmptyUri(R.mipmap.ic_launcher)//url为空或请求的资源不存在时                .showImageOnFail(R.mipmap.ic_launcher)//下载失败时显示的图片                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片色彩模式                .imageScaleType(ImageScaleType.EXACTLY)//设置图片的缩放模式===imageView,,ScaleType                .displayer(new RoundedBitmapDisplayer(50))//设置图片圆角显示  弧度                .build();        //params2:图片路径  params3:显示的控件上        com.nostra13.universalimageloader.core.ImageLoader.getInstance().displayImage(path.toString(),imageView,options);    }}===================================================================
MyApp 方法:
import android.app.Application;import android.os.Environment;import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;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.nostra13.universalimageloader.core.download.BaseImageDownloader;import java.io.File;/** * Created by jane on 2017/12/12. */public class MyApp extends Application {    @Override    public void onCreate() {        super.onCreate();        //自定义磁盘缓存路径  系统默认的缓存路径 sd...<package>..cache  当app被卸载时,此路径下的缓存图片一并被删除        //File cacheDir=getExternalCacheDir();        File cacheDir= new File(Environment.getExternalStorageDirectory().getPath()+"/aaa");//自定义 sd卡的缓存路径        //第一步:对ImageLoader进行初使化        ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this)                .memoryCacheExtraOptions(320, 450) // default = device screen dimensions 内存缓存文件的最大长宽                .diskCacheExtraOptions(480, 800, null)  // 本地缓存的详细信息(缓存的最大长宽),最好不要设置这个                .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级                .tasksProcessingOrder(QueueProcessingType.FIFO) // default                .denyCacheImageMultipleSizesInMemory()                .memoryCache(new LruMemoryCache(10 * 1024 * 1024)) //可以通过自己的内存缓存实现                .memoryCacheSize(2 * 1024 * 1024)  // 内存缓存的最大值                .memoryCacheSizePercentage(13) // default                .diskCache(new UnlimitedDiscCache(cacheDir)) // 磁盘缓存 --default 可以自定义缓存路径                .diskCacheSize(20 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值                .diskCacheFileCount(100)  // 可以缓存的文件数量                // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密                .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())                .imageDownloader(new BaseImageDownloader(this)) // default                .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default                .writeDebugLogs() // 打印debug log                .build();        ImageLoader.getInstance().init(configuration);    }}
原创粉丝点击