zoukankan      html  css  js  c++  java
  • Gilde加载网络图片(一)

    前两天 一个朋友要在本地加载几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等 具体的还有很多问题。慢慢看吧。





  • 相关阅读:
    python基础学习-无参装饰器
    python基础学习-day16==课后作业练习(函数对象和闭包)
    python基础学习-函数闭包
    python基础学习-函数对象与函数嵌套
    4.15作业
    反射、元类
    Mixins、多态、绑定方法与非绑定方法
    propety装饰器、继承
    封装
    4.8作业
  • 原文地址:https://www.cnblogs.com/yizuochengchi2012/p/5534796.html
Copyright © 2011-2022 走看看