Glide插件的使用

1、添加依赖

compile 'com.github.bumptech.glide:glide:3.6.1'

2、使用(网络图片+本地图片)

 圆角效果不显示、以及刷新后图片变形问题,已在下方代码中有所解释:

public class GlideUtils {
    public static final int FIT_CENTER=0;//默认
    public static final int FIT_XY=1;
    public static final int CENTER_CROP=2;
    public static final int MATRIX=3;
    /**
     * 加载网络图片
     * @param mContext
     * @param url  图片地址
     * @param view  承载View
     * @param scaleType  显示方式
     *                   --- MATRIX 、FIT_XY、CENTER_CROP
     * @param btf   设置圆角等
     */
    public static void loadPic(Context  mContext, String url, final ImageView view, int scaleType, BitmapTransformation btf){
        BitmapTypeRequest transform = Glide.with(mContext)
                .load(url)
                .asBitmap();//图不直接给控件,而是让控件拿到Bitmap后再操作。***解决第一次加载时圆角不显示问题,以及刷新后图片变形问题(该问题可能不是每次都出现)***

        //  transform .centerCrop()
        //  transform .transform(btf)  //Glide4.0版本  centerCrop()和transform()共存时,centerCrop()会覆盖transform()。最明显的是圆角没有了
        //        可以使用 transform.transform(new CenterCrop(mContext),btf);实现

        switch (scaleType){
            case MATRIX:
            case FIT_XY:
                if (btf!=null)
                    transform.transform(btf);
                break;
            case CENTER_CROP:
                if (btf!=null){
                    transform.transform(new CenterCrop(mContext),btf);
                }else {
                    transform .centerCrop();
                }
                break;

            case FIT_CENTER:
                if (btf!=null){
                    transform.transform(new FitCenter(mContext),btf);
                }else {
                    transform .fitCenter();
                }

                break;


        }

        //        .skipMemoryCache(false).diskCacheStrategy(DiskCacheStrategy.RESULT)//缓存:内存缓存>>本地缓存>>网络缓存
                transform.placeholder(R.drawable.placeholder)//设置占位图,在加载之前显示
                .error(R.drawable.placeholder)
                .into(view);

    }

  /**
     * 加载本地图片
     * @param mContext
     * @param resID  图片地址
     * @param view  承载View
     * @param scaleType  显示方式
     *                   --- MATRIX 、FIT_XY、CENTER_CROP
     * @param btf   设置圆角等
     */
    public static void loadPic(Context  mContext, int resID, final ImageView view, int scaleType, BitmapTransformation btf){
        BitmapTypeRequest transform = Glide.with(mContext)
                .load(resID)
                .asBitmap();//图不直接给控件,而是让控件拿到Bitmap后再操作。***解决第一次加载时圆角不显示问题,以及刷新后图片变形问题(该问题可能不是每次都出现)***

        //  transform .centerCrop()
        //  transform .transform(btf)  //Glide4.0版本  centerCrop()和transform()共存时,centerCrop()会覆盖transform()。最明显的是圆角没有了
        //        可以使用 transform.transform(new CenterCrop(mContext),btf);实现

        switch (scaleType){
            case MATRIX:
            case FIT_XY:
                if (btf!=null)
                    transform.transform(btf);
                break;
            case CENTER_CROP:
                if (btf!=null){
                    transform.transform(new CenterCrop(mContext),btf);
                }else {
                    transform .centerCrop();
                }
                break;

            case FIT_CENTER:
                if (btf!=null){
                    transform.transform(new FitCenter(mContext),btf);
                }else {
                    transform .fitCenter();
                }

                break;


        }

        //        .skipMemoryCache(false).diskCacheStrategy(DiskCacheStrategy.RESULT)//缓存:内存缓存>>本地缓存>>网络缓存
        transform.placeholder(R.drawable.placeholder)//设置占位图,在加载之前显示
                .error(R.drawable.placeholder)
                .into(view);

    }


 }

如果想实现圆角等效果,使用transfrom(BitmapTransformation  bitmapTransformation)实现,我们要协议了类继承BitmapTransformation。

(3)拓展 --  圆角效果

public class GlideRoundRectBitmapTransformation extends BitmapTransformation {

    int radius=25;

    public GlideRoundRectBitmapTransformation(Context context) {
        super(context);
    }

    public GlideRoundRectBitmapTransformation(Context context,int radius) {
        super(context);

        this.radius=radius;

    }


    @Override
    protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {

        return roundCorner(pool, toTransform);


    }

    private Bitmap roundCorner(BitmapPool pool, Bitmap toTransform) {
        if (toTransform == null) return null;

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

        Canvas canvas = new Canvas(result);
        Paint paint = new Paint();
        paint.setShader(new BitmapShader(toTransform, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
        paint.setAntiAlias(true);
        RectF rectF = new RectF(0f, 0f, toTransform.getWidth(), toTransform.getHeight());
        canvas.drawRoundRect(rectF, radius, radius, paint);
        Log.d("Glide半径大小",radius+"");
        return result;
    }

    @Override
    public String getId() {
        return getClass().getName() + Math.round(radius);
    }
}

 

你可能感兴趣的:(第三方插件/控件/平台的使用)