glide框架的简单使用

来源:互联网 发布:淘宝先锋乒羽商城 编辑:程序博客网 时间:2024/06/05 04:07

主方法

public class MainActivity extends AppCompatActivity implements View.OnClickListener {



    protected ImageView iv;
    protected Button btn;
    protected String item;
    private String STR_TAG = "--->***";
    private String TAG = this.getClass().getSimpleName();
    protected String result;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.activity_main);


        initView();
    }


    private void initView() {
        iv = (ImageView) findViewById(R.id.iv);
        btn = (Button) findViewById(R.id.btn);
        Button btn2 = (Button) findViewById(R.id.btn2);
        btn.setOnClickListener(MainActivity.this);
        btn2.setOnClickListener(MainActivity.this);
    }


    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.btn) {
            show();
        } else if (view.getId() == R.id.btn2) {
            show0();
        }
    }


    private void show0() {
        String[] items = {
                "0加载图片来自File",
                "1加载图片来自资源id",
                "2加载图片来自uri",
                "3加载强制转化为gif",
                "4加载原图的缩略图",
                "5加载缩略图高级方式",
                "6加载设置不缓存",
                "7加载设置优先级",
                "8加载回调后的图片",
                "9加载回调后的图片设置尺寸",
                "10加载图片圆角转换",
                "11加载图片圆角转换2",
        };
        new AlertDialog.Builder(this)
                .setTitle("glide操作2")
                .setItems(items, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        switch (which) {
                            case 0:
                                selectedA0();
                                break;
                            case 1:
                                selectedA1();
                                break;
                            case 2:
                                selectedA2();
                                break;
                            case 3:
                                selectedA3();
                                break;
                            case 4:
                                selectedA4();
                                break;
                            case 5:
                                selectedA5();
                                break;
                            case 6:
                                selectedA6();
                                break;
                            case 7:
                                selectedA7();
                                break;
                            case 8:
                                selectedA8();
                                break;
                            case 9:
                                selectedA9();
                                break;
                            case 10:
                                selectedA10();
                                break;
                            case 11:
                                selectedA11();
                                break;
                            case 12:
                                break;
                        }
                    }
                }).create()
                .show();
    }


    private void selectedA11() {
        //RoundedCorners,
        //CenterInside
        Glide.with(this)
                .load(UC.IMAGE_URL_A11)
                .apply(
                        new RequestOptions()
                                .override(300)
                                .transform(new RoundedCorners(20))
                )
                .into(iv);
    }


    private void selectedA10() {
        Glide.with(this)
                .load(UC.IMAGE_URL_A10)
                .apply(new RequestOptions().transform(new GlideRoundTransform(this)))
                .into(iv);
    }


    private void selectedA9() {
        //强制Glide返回一个Bitmap
        SimpleTarget<Bitmap> target = new SimpleTarget<Bitmap>(300, 300) {
            @Override
            public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
                iv.setImageBitmap(resource);
            }
        };
        Glide.with(this).asBitmap()
                .load(UC.IMAGE_URL_A9)
                .into(target
                );
    }




    private void selectedA8() {
        //上面这段代码不要写成匿名内部类的机制,原因就是java的自动垃圾回收机制可能在图片还没有加载好的时候就已经把你的Target回收了
        //注意.with()里面的参数,Glide的请求是和传进去的Context共存亡的,如果传一个Activity进去,当Activity GG过后,你的请求也就GG了,但是如果这样传:.with(context.getApplicationContext() ).当你的Activity GG过后,请求还是会继续,回调还是会继续。




        //强制Glide返回一个Bitmap
        SimpleTarget<Bitmap> target = new SimpleTarget<Bitmap>() {
            @Override
            public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
                iv.setImageBitmap(resource);
            }
        };
        Glide.with(this).asBitmap()
                .load(UC.IMAGE_URL_A8)
                .into(target
                );
    }


    private void selectedA7() {
        Glide.with(this)
                .load(UC.IMAGE_URL_A7)
                .apply(new RequestOptions().priority(Priority.LOW))
                .into(iv);
    }


    private void selectedA6() {
        Glide.with(this)
                .load(UC.IMAGE_URL_A6)
                .apply(new RequestOptions().skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE))
                .into(iv);
    }


    private void selectedA5() {
        //先加载第一张图片作为缩略图,在加载最终要显示的图片
        //thumbnail中加载的是缩略图
        Glide.with(this).load(UC.IMAGE_URL_9)
                .thumbnail(Glide.with(this).load(UC.IMAGE_URL_A5)).into(iv);
    }


    private void selectedA4() {
        //先加载为原图的十分之一,后再加载原图.
        Glide.with(this)
                .load(UC.IMAGE_URL_A4)
                .thumbnail(0.1f)
                .into(iv);
    }


    private void selectedA3() {
        Glide.with(this).asGif().load(UC.GIF_URL_0).into(iv);
    }


    private void selectedA2() {
        Glide.with(this)
                .load(Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "d.jpg")))
                .into(iv);
    }


    private void selectedA1() {
        Glide.with(this)
                .load(R.mipmap.ic_launcher_round)
                .into(iv);
    }


    private void selectedA0() {
        File file = new File(Environment.getExternalStorageDirectory(), "3.jpg");
        Glide.with(this).load(file).into(iv);
    }


    private void show() {
        final String[] items = {
                "0加载图片一般用法",
                "1加载图片成功监听",
                "2加载图片失败",
                "3加载图片ID占位图",
                "4加载图片Drawable占位图",
                "5加载图片传入null",
                "6加载图片后修改宽高",
                "7加载图片后修改宽高等尺寸",
                "8加载图片centerCrop",
                "9加载图片fitCenter",
                "10加载图片centerInside",
                "11加载图片circleCrop",
                "12加载动态图的第一帧",
                "13加载动态图成功",
                "14加载本地视频缩略图",


        };
        new AlertDialog.Builder(this)
                .setTitle("glide操作选项")
                .setItems(items, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        item = items[which] + STR_TAG;
                        switch (which) {
                            case 0:
                                selected0();
                                break;
                            case 1:
                                selected1();
                                break;
                            case 2:
                                selected2();
                                break;
                            case 3:
                                selected3();
                                break;
                            case 4:
                                selected4();
                                break;
                            case 5:
                                selected5();
                                break;
                            case 6:
                                selected6();
                                break;
                            case 7:
                                selected7();
                                break;
                            case 8:
                                selected8();
                                break;
                            case 9:
                                selected9();
                                break;
                            case 10:
                                selected10();
                                break;
                            case 11:
                                selected11();
                                break;
                            case 12:
                                selected12();
                                break;
                            case 13:
                                selected13();
                                break;
                            case 14:
                                selected14();
                                break;
                        }
                    }
                }).create()
                .show();
    }


    private void selected14() {
        //缩略图的加载
        String name = "v.f40.mp4";
        Glide.with(this).load(Uri.fromFile(new File(Environment.getExternalStorageDirectory(), name)))
                .into(iv);
    }


    private void selected13() {
        //GIF加载,URL指向的资源必须是gif,如果是普通图片则不显示。
        //相反,如果指向正确但没有执行asGif方法,则只是作为普通图片展示
        Glide.with(this).asGif().load(UC.GIF_URL_0).into(iv);
    }


    private void selected12() {
        //可理解为加载动态图的第一帧的Bitmap,比如Gif
        Glide.with(this).asBitmap().
                load(UC.GIF_URL_0).into(iv);
    }


    private void selected11() {
        Glide.with(this)
                .load(UC.IMAGE_URL_11)
                .apply(new RequestOptions().circleCrop())
                .into(iv);
    }


    private void selected10() {
        Glide.with(this)
                .load(UC.IMAGE_URL_10)
                .apply(new RequestOptions().centerInside())
                .into(iv);
    }


    private void selected9() {
        Glide.with(this)
                .load(UC.IMAGE_URL_8)
                .apply(new RequestOptions().fitCenter())
                .into(iv);
    }


    private void selected8() {
        RequestOptions options = new RequestOptions()
                .centerCrop();
        Glide.with(this)
                .load(UC.IMAGE_URL_9)
                .apply(options)
                .into(iv);
    }


    private void selected7() {
        RequestOptions options = new RequestOptions().override(300).fitCenter();
        Glide.with(this)
                .load(UC.IMAGE_URL_1)
                .apply(options)
                .into(iv);
    }


    private void selected6() {
        RequestOptions options = new RequestOptions().override(400, 400).fitCenter();
        Glide.with(this).load(UC.IMAGE_URL_1)
                .apply(options)
                .into(iv);
    }


    private void selected5() {
        RequestOptions options = new RequestOptions()
                .fallback(R.mipmap.ic_launcher)
                .diskCacheStrategy(DiskCacheStrategy.NONE);
        Glide.with(this)
                .load(null)
                .apply(options)
                .into(iv);
    }


    private void selected4() {
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.load);
        Drawable drawable = new BitmapDrawable(getResources(), bitmap);
        RequestOptions options = new RequestOptions().placeholder(drawable);
        Glide.with(this)
                .load(UC.IMAGE_URL_ERROR)
                .apply(options)
                .into(iv);
    }


    private void selected3() {
        RequestOptions options = new RequestOptions()
                .placeholder(R.mipmap.load)
                .error(R.mipmap.fail)
                .fallback(R.mipmap.ic_launcher)
                .diskCacheStrategy(DiskCacheStrategy.NONE);
        Glide.with(this)
                .load(UC.IMAGE_URL_ERROR)
                .apply(options)
                .into(iv);
    }


    private void selected2() {
        Glide.with(this)
                .load(UC.IMAGE_URL_ERROR)
                .listener(new RequestListener<Drawable>() {
                    @Override
                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                        DemonstrateUtil.showToastResult(MainActivity.this, "onLoadFailed失败");
                        return false;
                    }


                    @Override
                    public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                        DemonstrateUtil.showToastResult(MainActivity.this, "onResourceReady成功");
                        return false;
                    }
                }).into(iv);
    }


    private void selected1() {


        Glide.with(this)
                .load(UC.IMAGE_URL_1)
                .listener(new RequestListener<Drawable>() {
                    @Override
                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                        DemonstrateUtil.showToastResult(MainActivity.this, "onLoadFailed加载失败!");
                        return false;
                    }


                    @Override
                    public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                        DemonstrateUtil.showToastResult(MainActivity.this, "onResourceReady加载成功!");
                        return false;
                    }
                })
                .into(iv);
    }


    private void selected0() {
        //默认使用原图加载,内存缓存,磁盘缓存,
        Glide.with(this).load(UC.IMAGE_URL_0).into(iv);
    }




}


//实现圆角图片类

/**
 *实现圆角效果.
 */


public class GlideRoundTransform extends BitmapTransformation {
    private float radius = 0f;


    public GlideRoundTransform(Context context) {
        this(context, 20);
    }


    public GlideRoundTransform(Context context, int dp) {
        super(context);
        //density,屏幕密度.1.5,1,0.75
        this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
    }


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


    private Bitmap roundCrop(BitmapPool pool, Bitmap source) {
        if (source == null) return null;
        //Bitmap.Config.ARGB_8888,图片质量.
        Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);


        if (result == null) {
            result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
        }
        Canvas canvas = new Canvas(result);
        Paint paint = new Paint();
        //REPEAT,MIRROR,CLAMP{重复,镜像,拉伸}
        //设置着色器
        paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
        //设置抗锯齿.
        paint.setAntiAlias(true);
        //矩阵,(float left, float top, float right, float bottom)
        //矩形的左边的x坐标,矩形的顶部的Y坐标,对右侧的矩形的x坐标,矩形的底部的Y坐标
        RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
        //画指定的圆矩形。
        //drawRoundRect(RectF rect, float rx, float ry, @NonNull Paint paint)
        //矩阵,圆角,椭圆的x半径,y半径.画笔,
        canvas.drawRoundRect(rectF, radius, radius, paint);
        return result;


    }


    @Override
    public void updateDiskCacheKey(MessageDigest messageDigest) {


    }
}



//不确定

public class MyTransformation implements Transformation<Bitmap> {


    private BitmapPool mBitmapPool;
    private int mWidth;
    private int mHeight;


    public MyTransformation(Context context) {
        this(Glide.get(context).getBitmapPool());
    }


    public MyTransformation(BitmapPool pool) {
        this.mBitmapPool = pool;
    }


    @Override
    public Resource<Bitmap> transform(Context context, Resource<Bitmap> resource, int outWidth, int outHeight) {
        Bitmap source = resource.get();
        int size = Math.min(source.getWidth(), source.getHeight());


        mWidth = (source.getWidth() - size) / 2;
        mHeight = (source.getHeight() - size) / 2;


        Bitmap.Config config =
                source.getConfig() != null ? source.getConfig() : Bitmap.Config.ARGB_8888;
        Bitmap bitmap = mBitmapPool.get(mWidth, mHeight, config);
        if (bitmap == null) {
            bitmap = Bitmap.createBitmap(source, mWidth, mHeight, size, size);
        }


        return BitmapResource.obtain(bitmap, mBitmapPool);
    }


    @Override
    public void updateDiskCacheKey(MessageDigest messageDigest) {


    }
}



//示例图片地址

public interface UC {
    String IMAGE_URL_0 = "http://p0.so.qhmsg.com/t010b9ba7c1e568dd3f.jpg";
    String IMAGE_URL_1 = "http://img3.a0bi.com/upload/ttq/20160621/1466508726953.jpg";
    String IMAGE_URL_8= "http://www.285868.com/uploadfile/2016/1027/20161027102235543.jpg";
    String IMAGE_URL_ERROR = "http://p0.so.qhmsg.com/t010b9ba7c1e568dd3f66.jpg";
    String IMAGE_URL_9 = "http://img2.3lian.com/2014/f3/51/d/2.jpg";
    String IMAGE_URL_10 = "http://www.5djiaren.com/uploads/2015-10/24-175904_894.jpg";
    String IMAGE_URL_11 = "http://tupian.enterdesk.com/2013/mxy/0810/1/4.jpg";
    String IMAGE_URL_12 = "http://thumb.takefoto.cn/wp-content/uploads/2016/03/201603211236327864.jpg";


    String GIF_URL_0 = "http://uploads.rayli.com.cn/2016/0823/1471943453795.gif";
    String VIDEO_RUL_0 = "http://1251603248.vod2.myqcloud.com/4c9adaa7vodtransgzp1251603248/30e0819d9031868223192061218/v.f40.mp4";
    String IMAGE_URL_A4 = "http://www.hinews.cn/pic/0/10/24/62/10246261_856361.jpg";
    String IMAGE_URL_A5 = "http://img1.gtimg.com/0/1/168/16805_1200x1000_0.jpg";
    String IMAGE_URL_A6 = "http://img.mp.itc.cn/upload/20161104/d5737b849b6442ea9f594ddc3cbbc23a_th.jpeg";
    String IMAGE_URL_A7 = "http://5.26923.com/download/pic/000/330/4a9bfbb14275471e5ec956ad416b6194.jpg";
    String IMAGE_URL_A8 = "http://pic1.win4000.com/wallpaper/8/55f91ad3a23ea.jpg";
    String IMAGE_URL_A9 = "http://www.hinews.cn/pic/0/14/00/69/14006911_715505.jpg";
    String IMAGE_URL_A10 = "http://p4.so.qhmsg.com/t0199c5431414d2ea29.jpg";
    String IMAGE_URL_A11 = "http://p2.cri.cn/M00/1C/C0/CqgNOlm4oreAHkbcAAAAAAAAAAA69.3200x2000.jpeg";
    String IMAGE_URL_A12 = "http://img1.qq.com/ent/pics/10742/10742073.jpg";
}