用ImageLoader来显示网络图片和本地图片,我们先简单的了解一下如何使用
1.添加jar包:在androidStudio中找到这个然后如图加入这个包
ps:也可以自己从外部导入jar包
2.在Android Manifest中加入权限:
android:name="android.permission.INTERNET" />
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3.初始化ImageLoader
//实例化ImageLoader ImageLoaderConfiguration config = new ImageLoaderConfiguration. Builder(this).build(); //这里可以自定义很多操作 ImageLoader.getInstance().init(config);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.memoryCacheExtraOptions(480, 800) // default = device screen dimensions
.discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null)
.taskExecutor(...)
.taskExecutorForCachedImages(...)
.threadPoolSize(3) // default
.threadPriority(Thread.NORM_PRIORITY - 1) // default
.tasksProcessingOrder(QueueProcessingType.FIFO) // default
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
.memoryCacheSize(2 * 1024 * 1024)
.memoryCacheSizePercentage(13) // default
.discCache(new UnlimitedDiscCache(cacheDir)) // default
.discCacheSize(50 * 1024 * 1024)
.discCacheFileCount(100)
.discCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
.imageDownloader(new BaseImageDownloader(context)) // default
.imageDecoder(new BaseImageDecoder()) // default
.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
.writeDebugLogs() .build();
4.DisplayImageOptions的使用介绍:根据不同的需求来配置这个用于显示图片的方法选项
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_stub) // resource or drawable
.showImageForEmptyUri(R.drawable.ic_empty) // resource or drawable
.showImageOnFail(R.drawable.ic_error) // resource or drawable
.resetViewBeforeLoading(false)// default
.delayBeforeLoading(1000) .cacheInMemory(false) // default
.cacheOnDisc(false) // default
.preProcessor(...) .postProcessor(...) .extraForDownloader(...)
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) //default
.bitmapConfig(Bitmap.Config.ARGB_8888) //default
.decodingOptions(...) .displayer(newSimpleBitmapDisplayer()) // default
.handler(new Handler()) // default
.build();
5.可显示的Uri格式:
String imageUri = "http://site.com/image.png"; // from Web
String imageUri = "file:///mnt/sdcard/image.png"; // from SD card
String imageUri = "content://media/external/audio/albumart/13"; // from content provider
String imageUri = "assets://image.png"; // from assets
String imageUri = "drawable://" + R.drawable.image; // from drawables (only images, non-9patch)
6.图片显示方法:
// Load image, decode it to Bitmap and display Bitmap ImageView
imageLoader.displayImage(imageUri, imageView, displayOptions, new ImageLoadingListener() {@Override public void onLoadingStarted(String imageUri, View view) { ... } @Override publicvoid onLoadingFailed(String imageUri, View view, FailReason failReason) { ... } @Overridepublic void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { ... }@Override public void onLoadingCancelled(String imageUri, View view) { ... } });
// Load image, decode it to Bitmap and return Bitmap to callback
ImageSize targetSize = newImageSize(120, 80); // result Bitmap will be fit to this size
imageLoader.loadImage(imageUri,targetSize, displayOptions, new SimpleImageLoadingListener() { @Override public voidonLoadingComplete(String imageUri, View view, Bitmap loadedImage) { // Do whatever you want with Bitmap } });
7.实例:加载网络图片(http://pic.pptbz.com/pptpic/201110/20111014111307895.jpg)
Activity中初始化实例并传入图片Uri
case R.id.tv_action_three:
Log.d("photo","tv_action_three");
// String uriString = "http://192.168.105.100:7070";
String uriString = "http://pic.pptbz.com/pptpic/201110/20111014111307895.jpg";
Helper_Image.gotoBigPicture(TestActivity.this, uriString);
break;
public class Helper_Image {
static int FADEINTIME = 200;
//圆角度
static int ROUNDED = 30;
static int ROUNDED_CIRCLE = 360;
/**
* 看大图
*/
public static void gotoBigPicture(Context context, String imageUrl) {
if ("".equals(imageUrl)) {
// imageUrl = "drawable://" + R.drawable.default_head_image;
Log.d("photo","Uri为空");
}
ArrayList<String> lStringArrayList = new ArrayList<String>();
lStringArrayList.add(imageUrl);
Intent picIntent = new Intent(context, ZoomPictureActivity.class);
picIntent.putExtra(ZoomPictureActivity.INTENT_PICTURES,lStringArrayList); //用一个Activity去显示网络图片
picIntent.putExtra(ZoomPictureActivity.INTENT_CURRENT_PIC, imageUrl);
((Activity) context).startActivity(picIntent);
}
/**
* 使用ImageLoader加载图片
*
* @param image
* @param imageUrl
*/
public static void displayImage_network(ImageView image, String imageUrl) {
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.showImageOnLoading(R.drawable.loading_pic)
.showImageOnFail(R.drawable.load_pic_failed)
.showImageForEmptyUri(R.drawable.load_pic_failed)
.cacheOnDisk(true).considerExifParams(true)
// .imageScaleType(ImageScaleType.EXACTLY)
.resetViewBeforeLoading(true)
.displayer(new FadeInBitmapDisplayer(FADEINTIME))
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
ImageLoader.getInstance().displayImage(imageUrl, image, options);
}
}
ZoomPictureActivity:包含Fragment的适配器和ViewPager,Fregment里面放入一个ImageView用于显示图片(可以自定义一个ImageView,让其支持缩小/放大/长按保存等操作),这里不在详细叙述,使用方法为:
image = (TouchImageView) rootView.findViewById(R.id.display_picture);
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().finish();
}
});
String imageUrl = args.getString(ARGS_IMAGE_URL);
Helper_Image.displayImage_network(image, imageUrl);
效果图: