final PhotoViewAttacher attacher = new PhotoViewAttacher(imageView);//photoview使用方法:
ImageLoader.getInstance().displayImage(Url.IMAGE_PREFIX+urlList.get(position), imageView, ImageLoaderOptions.pager_options,//ImageLoader.getInstance().displayImage使用方法
new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
}
@Override
public void onLoadingFailed(String imageUri, View view,
FailReason failReason) {
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
attacher.update();
//在加载完图片的时候更新一下attacher
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
});
viewpager显示图片:
注意:如果是给viewpager放大图片:viewpager切换图片:photoview里也能滑动切换:但是
当imageview不存在的时候 photoview内部会判断:如果imageview==null 抛出异常:可是在viewpager中就缓存三个其他的销毁:一销毁为null就报异常:
将报异常注释掉
imageloader的使用:要参照例子:列库下载的时候的例子
一:要在全局的application中初始化:
二:调用:参数:参数一般单独建一个类
public class GooglePlayApplication extends Application{
private static Context context;
private static Handler mainHandler;//主线程的handler
/**
* app的入口函数
*/
@Override
public void onCreate() {
super.onCreate();
initImageLoader(this);
}
public static void initImageLoader(Context context) {
// This configuration tuning is custom. You can tune every option, you may tune some of them,
// or you can create default configuration by
// ImageLoaderConfiguration.createDefault(this);
// method.
ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context);
config.threadPriority(Thread.NORM_PRIORITY - 2);//配置下载图片的线程优先级
config.denyCacheImageMultipleSizesInMemory();//不会在内存中缓存多个大小的图片
config.diskCacheFileNameGenerator(new Md5FileNameGenerator());//为了保证图片名称唯一
config.diskCacheSize(50 * 1024 * 1024); // 50 MiB
//内存缓存大小默认是:app可用内存的1/8
config.tasksProcessingOrder(QueueProcessingType.LIFO);
config.writeDebugLogs(); // Remove for release app
// Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(config.build());
// ImageLoader.getInstance().init( ImageLoaderConfiguration.createDefault(this));
}
package com.itheima71.googleplay.global;
import android.graphics.Bitmap;
import com.itheima71.googleplay.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
public class ImageLoaderOptions {
//在显示小图的选项
public static DisplayImageOptions list_options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_default)// 加载过程中显示什么图片
.showImageForEmptyUri(R.drawable.ic_default)// url为空的时候显示什么图片
.showImageOnFail(R.drawable.ic_default)// 加载失败显示什么图片
.cacheInMemory(true)// 在内存缓存
.cacheOnDisk(true)// 在硬盘缓存
.considerExifParams(true)// 会识别图片的方向信息
.displayer(new FadeInBitmapDisplayer(500)).build();// 渐渐显示的动画
// .displayer(new RoundedBitmapDisplayer(100)).build();//显示圆角或圆形图片
//在显示大图的时候的选项,
public static DisplayImageOptions pager_options = new DisplayImageOptions.Builder()
.showImageForEmptyUri(R.drawable.ic_default)
.showImageOnFail(R.drawable.ic_default)
.resetViewBeforeLoading(true)//在ImageView显示图片之前先清空已有的图片内容
.cacheOnDisk(true)
.imageScaleType(ImageScaleType.EXACTLY)//会进一步将按照ImageView的宽高来缩放
.bitmapConfig(Bitmap.Config.RGB_565)//设置颜色的渲染模式,是比较节省内存的模式
.considerExifParams(true)
.displayer(new FadeInBitmapDisplayer(300)).build();
}
.bitmapConfig(Bitmap.Config.RGB_565)//设置为RGB565比起默认的ARGB_8888要节省大量的内存
.delayBeforeLoading(100)//载入图片前稍做延时可以提高整体滑动的流畅度
listview 跳图的问题:
在加载前给显示图片的控件设置一个tag,例:
holder.ivIcon.setTag(url);
在加载完成的时候:
if(imageUri.equals(holder.ivIcon.getTag())){
holder.ivIcon.setImageBitmap(loadedImage);
}
另外最好用ImageLoader.getInstance().loadImage这个方法加载图片
真正的闪烁原因不是display和imageload方法的缘故,而是在设置option时,设置了,displayer(new FadeInBitmapDisplayer(200))的缘故,
直接设置为.displayer(new SimpleBitmapDisplayer()),然后再getview方法中调用display方法,就不会闪烁了.
首先给ImageView设置一个Tag,这个Tag中设置的是图片的url,
然后在加载的时候取得这个url和要加载那position中的url对比,如果不相同就加载,相同就是复用以前的就不加载了。
colors=new int[]{context.getResources().getColor(R.color.imagebackgroud_one),
context.getResources().getColor(R.color.imagebackgroud_two),
context.getResources().getColor(R.color.imagebackgroud_three),
context.getResources().getColor(R.color.imagebackgroud_four)
};
冉冉给的 option参数不能太多>>>>>>>
defaultOptions = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.iamge_backgroud_loading_defult)
.showImageForEmptyUri(R.drawable.iamge_backgroud_loading_defult)
.showImageOnFail(R.drawable.iamge_backgroud_loading_defult).cacheInMemory(true)
.cacheOnDisk(true).considerExifParams(true).build();
剪图:不传option 然后就没有问题:图片不会被放大,不传option 使用的默认的 去比对:将默认的图片去掉:就没有问题!
defaultOptions = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true).considerExifParams(true).build();
//imageloader清缓存
ImageLoader.getInstance().clearMemoryCache();
imageloader使用的最实际方法:
//功能性试验
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.threadPriority(Thread.NORM_PRIORITY - 2)//配置下载图片的线程优先级
.denyCacheImageMultipleSizesInMemory()//不会在内存中缓存多个大小的图片
.diskCacheFileNameGenerator(new Md5FileNameGenerator())//为了保证图片名称唯一
.diskCacheSize(50 * 1024 * 1024) // 50 MiB
//内存缓存大小默认是:app可用内存的1/8
.tasksProcessingOrder(QueueProcessingType.LIFO)
.writeDebugLogs()// Remove for release app
.build();
// Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(config);
各种情况的显示
public static DisplayImageOptions options= new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.img_down)
.showImageForEmptyUri(R.drawable.img_down)
.showImageOnFail(R.drawable.img_down).cacheInMemory(true)
.cacheOnDisk(true).considerExifParams(true)
.displayer(new FadeInBitmapDisplayer(1000))//是否图片加载好后渐入的动画时间
.build();
public static DisplayImageOptions headOptions=new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.head_loading)
.showImageForEmptyUri(R.drawable.head_loading)
.showImageOnFail(R.drawable.head_loading).cacheInMemory(true)
.cacheOnDisk(true).considerExifParams(true)
.displayer(new FadeInBitmapDisplayer(1000))//是否图片加载好后渐入的动画时间
.build();
public static DisplayImageOptions playOption=new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.img_default)
.showImageForEmptyUri(R.drawable.img_default)
.showImageOnFail(R.drawable.img_default).cacheInMemory(true)
.cacheOnDisk(true).considerExifParams(true)
.displayer(new SimpleBitmapDisplayer())//是否图片加载好后渐入的动画时间
.build();
public static DisplayImageOptions optionsCrop= new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true).considerExifParams(true).build();
public static DisplayImageOptions playRoundOption=new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.img_default)
.showImageForEmptyUri(R.drawable.img_default)
.showImageOnFail(R.drawable.img_default).cacheInMemory(true)
.cacheOnDisk(true).considerExifParams(true)
.displayer(new RoundedBitmapDisplayer(5))//是否图片加载好后渐入的动画时间
.build();
网站:http://www.2cto.com/kf/201412/361295.html
File cacheDir = StorageUtils.getCacheDirectory(context); //缓存文件夹路径
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.memoryCacheExtraOptions(480, 800) // default = device screen dimensions 内存缓存文件的最大长宽
.diskCacheExtraOptions(480, 800, null) // 本地缓存的详细信息(缓存的最大长宽),最好不要设置这个
.taskExecutor(…)
.taskExecutorForCachedImages(…)
.threadPoolSize(3) // default 线程池内加载的数量
.threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
.tasksProcessingOrder(QueueProcessingType.FIFO) // default
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现
.memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值
.memoryCacheSizePercentage(13) // default
.diskCache(new UnlimitedDiscCache(cacheDir)) // default 可以自定义缓存路径
.diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值
.diskCacheFileCount(100) // 可以缓存的文件数量
// default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
.imageDownloader(new BaseImageDownloader(context)) // default
.imageDecoder(new BaseImageDecoder()) // default
.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
.writeDebugLogs() // 打印debug log
.build(); //开始构建
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_stub) // 设置图片下载期间显示的图片
.showImageForEmptyUri(R.drawable.ic_empty) // 设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.drawable.ic_error) // 设置图片加载或解码过程中发生错误显示的图片
.resetViewBeforeLoading(false) // default 设置图片在加载前是否重置、复位
.delayBeforeLoading(1000) // 下载前的延迟时间
.cacheInMemory(false) // default 设置下载的图片是否缓存在内存中
.cacheOnDisk(false) // default 设置下载的图片是否缓存在SD卡中
.preProcessor(...)
.postProcessor(...)
.extraForDownloader(...)
.considerExifParams(false) // default
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.ARGB_8888) // default 设置图片的解码类型
.decodingOptions(...) // 图片的解码设置
.displayer(new SimpleBitmapDisplayer()) // default 还可以设置圆角图片new RoundedBitmapDisplayer(20)
.handler(new Handler()) // default
.build();
1).imageScaleType(ImageScaleType imageScaleType) //设置图片的缩放方式
缩放类型mageScaleType:
EXACTLY :图像将完全按比例缩小的目标大小
EXACTLY_STRETCHED:图片会缩放到目标大小完全
IN_SAMPLE_INT:图像将被二次采样的整数倍
IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小
NONE:图片不会调整
2).displayer(BitmapDisplayer displayer) //设置图片的显示方式
显示方式displayer:
RoundedBitmapDisplayer(int roundPixels)设置圆角图片
FakeBitmapDisplayer()这个类什么都没做
FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间
SimpleBitmapDisplayer()正常显示一张图片
.considerExifParams(true) //是否考虑JPEG图像EXIF参数(旋转,翻转)
.displayer(new FadeInBitmapDisplayer(100))// 图片加载好后渐入的动画时间
1、 ImageLoader.getInstance().displayImage(uri, imageView);
2、 ImageLoader.getInstance().displayImage(uri, imageView, options);
3、 ImageLoader.getInstance().displayImage(uri, imageView, listener);
4、 ImageLoader.getInstance().displayImage(uri, imageView, options, listener);
5、 ImageLoader.getInstance().displayImage(uri, imageView, options, listener, progressListener);
imageUrl 图片的URL地址
imageView 显示图片的ImageView控件
options DisplayImageOptions配置信息
listener 图片下载情况的监听
progressListener 图片下载进度的监听
ImageLoader.getInstance().displayImage(uri, imageView, options,
new ImageLoadingListener() {
@Override
public void onLoadingStarted(String arg0, View arg1) {
//开始加载
}
@Override
public void onLoadingFailed(String arg0, View arg1,
FailReason arg2) {
//加载失败
}
@Override
public void onLoadingComplete(String arg0, View arg1,
Bitmap arg2) {
//加载成功
}
@Override
public void onLoadingCancelled(String arg0, View arg1) {
//加载取消
}
}, new ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String imageUri, View view,
int current, int total) {
//加载进度
}
});