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等 具体的还有很多问题。慢慢看吧。
相关文章推荐
- Java HttpClient Post请求发送数据乱码
- http://www.cnblogs.com/carekee/articles/1854674.html
- HTTP 403
- [置顶] Okhttp和Picasso配合使用外加ACache实现缓存
- 强连通Tarjan NYOJ 120 校园网络
- pyton简单网络爬虫,aspx网站中form使用到了__VIEWSTATE、__EVENTVALIDATION、cookie来验证的提交
- 网络协议的认识
- epoll实现TCP通信
- HTTP协议
- HTTP POST GET PUT请求处理
- TCP/IP——Internet 协议(IP)功能
- android开发利用AsyncHttpClient下载服务器文件
- 深入剖析PHP输入流 php://input (转载 http://www.nowamagic.net/academy/detail/12220520)
- 初学网络爬虫
- TCP套接字编程
- Linux TCP/IP stack
- Netfilter
- 资源地址-URL类
- (网络摘抄)UIImage指定大小裁剪图片
- tcpdump 使用