package bwei.com.day_0514_demo156;
import android.app.Application;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Environment;
import android.os.Handler;
import android.util.Log;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
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.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import java.io.File;
public class MyApp extends Application {
private static final String TAG = "---MyApp";
private Context context;
@Override
public void onCreate() {
super.onCreate();
context = this;
Log.d(TAG, "应用创建---");
initImageLoader();
}
private void initImageLoader() {
//Configuration 配置
//Builder 建造者模式
//存到images
String sdcardPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/images";
File file = new File(sdcardPath);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
//内存配置
.memoryCacheExtraOptions(480, 800) // default = device screen dimensions
//磁盘缓存
// .diskCacheExtraOptions(480, 800, Bitmap.CompressFormat.JPEG, 75, null)
.threadPoolSize(3) // 线程池里面线程的数量
.threadPriority(Thread.NORM_PRIORITY - 1) // 线程优先级
.tasksProcessingOrder(QueueProcessingType.FIFO) // default
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))//内存缓存的大小
.memoryCacheSize(2 * 1024 * 1024)
.diskCache(new UnlimitedDiskCache(file)) // 指sdcard的缓存路径
.diskCacheSize(50 * 1024 * 1024)//指sdcard的缓存大小
// .diskCacheFileCount(100)//指sdcard的缓存文件数量
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
.imageDownloader(new BaseImageDownloader(context)) // default
// .imageDecoder(new BaseImageDecoder()) // 图片解码
.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
.writeDebugLogs()
.build();
//记得配置到ImageLoader
ImageLoader.getInstance().init(config);
}
//加载图片时候的配置
public static DisplayImageOptions getOptions() {
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.mipmap.ic_launcher) // 加载过程中显示的图片
.showImageForEmptyUri(R.mipmap.ic_launcher) //当地址为空的时候显示的图片
.showImageOnFail(R.mipmap.ic_launcher) // 加载错误时显示的图片
.resetViewBeforeLoading(true) // 加载前重置视图
.cacheInMemory(true) // 启动内存缓存
.cacheOnDisk(true) // 启动磁盘缓存
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default
.bitmapConfig(Bitmap.Config.ARGB_8888) // default
.displayer(new SimpleBitmapDisplayer()) // default
.displayer(new FadeInBitmapDisplayer(100))
.handler(new Handler()) // default
.build();
return options;
}
}
//权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
//下个页面
package com.daydayup.day07_imageloaderdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList;
import java.util.List;
/**
* 1.熟悉ImageLoader --- 加载一张图片
* 2.列表里面的图片 ImageLoader ---- 图片错乱
*
* 1.导包
* github
* 2.配置
* 3.使用
*
* ----三级缓存
* 1.多线程加载,加载效率高
* 2.可扩展性强。可以自定义配置
* 3.使用三级缓存。
*
* 应用的启动流程。---
*
*/
public class MainActivity extends AppCompatActivity {
private static String pic_url = "http://pic22.photophoto.cn/20120113/0036036848061774_b.jpg";
private static String pic1="http://img.zcool.cn/community/0381de85949053ca8012193a3339cc5.jpg";
private static String pic2 = "http://img.zcool.cn/community/038c0ee5744f9a500000025ae5acd2a.jpg";
private static String pic3 = "http://i1.hdslb.com/bfs/archive/763293ce06bf1e684ef0ea3da43ae5008d8564b8.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final List<String> images = new ArrayList<>();
images.add(pic_url);
images.add(pic1);
images.add(pic2);
images.add(pic3);
Button load_pic = findViewById(R.id.load_pic);
final ImageView imageView=findViewById(R.id.pic);
final ListView listView=findViewById(R.id.listview);
load_pic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//点击开始使用Imageloader加载图片
// ImageLoader.getInstance().displayImage(pic_url,imageView);
//listview加载图片
MyAdapter myAdapter = new MyAdapter(MainActivity.this, images);
listView.setAdapter(myAdapter);
}
});
}
}
//适配器
package bwei.com.day_0514_demo156.adapter;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.List;
import bwei.com.day_0514_demo156.MyApp;
import bwei.com.day_0514_demo156.R;
public class MyBase extends BaseAdapter {
private Context context;
private List<String> list;
public MyBase(Context context, List<String> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView==null){
convertView=View.inflate(context, R.layout.mybase,null);
holder = new ViewHolder();
holder.image=(ImageView) convertView.findViewById(R.id.my_image);
convertView.setTag(holder);
}else{
holder=(ViewHolder) convertView.getTag();
}
String pic_url=list.get(position%list.size());
ImageLoader.getInstance().displayImage(pic_url,holder.image, MyApp.getOptions());
return convertView;
}
class ViewHolder{
ImageView image;
}
}