您的位置:首页 > 理论基础 > 计算机网络

Gilde加载网络图片(一)

2016-05-27 15:28 260 查看
前两天 一个朋友要在本地加载几M的大图 用于用户滚动查看。按照思路 是压缩后加载显示但是这样会不清晰,其实gilde用来加载图片 很牛掰 于是了解一下 下面贴上两个工具类:
package com.one.util;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;

import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;

/**
* gilde显示为圆角图片
* Created by One on 2016/5/26.
*/
public class GlideCircleTransform extends BitmapTransformation {
public GlideCircleTransform(Context context) {
super(context);
}

@Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return circleCrop(pool, toTransform);
}

private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {
if (source == null) return null;

int size = Math.min(source.getWidth(), source.getHeight());
int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2;

// TODO this could be acquired from the pool too
Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);

Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
if (result == null) {
result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
}

Canvas canvas = new Canvas(result);
Paint paint = new Paint();
paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
float r = size / 2f;
canvas.drawCircle(r, r, r, paint);
return result;
}

@Override public String getId() {
return getClass().getName();
}
}
=======================================================

package com.one.util;

import android.content.Context;
import android.net.Uri;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.one.activity.R;

import java.io.File;

/**
* Gilde加载图片
* Created by One on 2016/5/26.
*/
public class ImageLoader {

/**
使用 //显示SD卡图片
File file = new File(imageUrl);
ImageLoader.getInstance().displayImage(this, file, studentNormal1SubmitDetailIv);

//显示网络图片
String url = "";
ImageLoader.getInstance().displayImage(this,url, studentNormal1SubmitDetailIv);

//显示为圆形
ImageLoader.getInstance().displayCricleImage(this,url, studentNormal1SubmitDetailIv);
*/

public static final String ANDROID_RESOURCE = "android.resource://";
public static final String FOREWARD_SLASH = "/";

private static class ImageLoaderHolder {
private static final ImageLoader INSTANCE = new ImageLoader();

}

private ImageLoader() {
}

public static final ImageLoader getInstance() {
return ImageLoaderHolder.INSTANCE;
}

//直接加载网络图片
public void displayImage(Context context, String url, ImageView imageView) {
Glide.with(context)
.load(url)
.centerCrop()
//.placeholder(R.drawable.two)
.crossFade()
.into(imageView);
}

//加载SD卡图片
public void displayImage(Context context, File file, ImageView imageView) {
Glide.with(context)
.load(file)
.centerCrop()
//.placeholder(R.drawable.two)
.into(imageView);

}

//加载SD卡图片并设置大小
public void displayImage(Context context, File file, ImageView imageView, int width, int
height) {
Glide.with(context)
.load(file)
.override(width, height)
.centerCrop()
//.placeholder(R.drawable.two)
.into(imageView);

}

//加载网络图片并设置大小
public void displayImage(Context context, String url, ImageView imageView, int width, int
height) {
Glide.with(context)
.load(url)
.centerCrop()
//.placeholder(R.drawable.two)
.override(width, height)
.crossFade()
.into(imageView);
}

//加载drawable图片
public void displayImage(Context context, int resId, ImageView imageView) {
Glide.with(context)
.load(resourceIdToUri(context, resId))
.crossFade()
//.placeholder(R.drawable.two)
.into(imageView);
}

//加载drawable图片显示为圆形图片
public void displayCricleImage(Context context, int resId, ImageView imageView) {
Glide.with(context)
.load(resourceIdToUri(context, resId))
.crossFade()
.placeholder(R.drawable.two)
.transform(new GlideCircleTransform(context))
.into(imageView);
}

//加载网络图片显示为圆形图片
public void displayCricleImage(Context context, String url, ImageView imageView) {
Glide.with(context)
.load(url)
.centerCrop()
.transform(new GlideCircleTransform(context))
.crossFade()
//.placeholder(R.drawable.two) 这里要的默认背景图片 要尺寸和加载的大小一下 不然会受影响
.into(imageView);
}

//加载SD卡图片显示为圆形图片
public void displayCricleImage(Context context, File file, ImageView imageView) {
Glide.with(context)
.load(file)
.centerCrop()
//.placeholder(R.drawable.two)
.transform(new GlideCircleTransform(context))
.into(imageView);

}

//将资源ID转为Uri
public Uri resourceIdToUri(Context context, int resourceId) {
return Uri.parse(ANDROID_RESOURCE + context.getPackageName() + FOREWARD_SLASH + resourceId);
}
}
=====================================
这样就实现简单的加载了 其实还有很多问题 比如:加载圆形图片的时候 如果默认的图片是长方形 加载出来的就会是椭圆。
还有 如果在listview中使用的话 还要考虑设置tag等 具体的还有很多问题。慢慢看吧。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: