Glide图片加载工具

1.导包       https://pan.baidu.com/s/1qXO05nm    密码:30ud      

添加 依赖      

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


添加权限

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>



 
 
 
 
 
 
2.主函数
package comqq.example.hasee.myapplication;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Environment;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.bumptech.glide.Priority;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target;
import com.bumptech.glide.request.transition.Transition;

import java.io.File;

public class MainActivity extends AppCompatActivity {
    private ImageView iv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv= (ImageView) findViewById(R.id.iv);
    }

    public void cc(View view) {
        switch (view.getId()) {
            case R.id.but1:
                //普通加载
                File file1 = new File(Environment.getExternalStorageDirectory(), "02.jpg");
                Glide.with(this).load(file1).listener(new RequestListener<Drawable>() {
                    @Override
                    public boolean onLoadFailed(@Nullable GlideException e, Object o, Target<Drawable> target, boolean b) {
                        Toast.makeText(MainActivity.this, "加载失败", Toast.LENGTH_SHORT).show();
                        return false;
                    }
                    @Override
                    public boolean onResourceReady(Drawable drawable, Object o, Target<Drawable> target, DataSource dataSource, boolean b) {
                        Toast.makeText(MainActivity.this, "加载成功", Toast.LENGTH_SHORT).show();
                        return false;
                    }
                }).into(iv);
                break;
            case R.id.but2:
                //加载gif
                File file2 = new File(Environment.getExternalStorageDirectory(), "aa.gif");
                Glide.with(this).asGif().load(file2).into(iv);
                break;

            case R.id.but3:
                //加载原图的缩略图
                //先加载为原图的十分之一,后再加载原图
                Glide.with(this).load("http://www.hinews.cn/pic/0/10/24/62/10246261_856361.jpg").thumbnail(0.1f).into(iv);
                break;

            case R.id.but4:
                //先加载第一张图片作为缩略图,在加载最终要显示的图片
                //thumbnail中加载的是缩略图
                Glide.with(this).load("http://img2.3lian.com/2014/f3/51/d/2.jpg")
                        .thumbnail(Glide.with(this).load("http://img1.gtimg.com/0/1/168/16805_1200x1000_0.jpg")).into(iv);
                break;

            case R.id.but5:
                //加载设置不缓存
                Glide.with(this)
                        .load("http://img.mp.itc.cn/upload/20161104/d5737b849b6442ea9f594ddc3cbbc23a_th.jpeg")
                        .apply(new RequestOptions().skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE))
                        .into(iv);
                break;

            case R.id.but6:
                //加载设置优先级
                Glide.with(this)
                        .load("http://5.26923.com/download/pic/000/330/4a9bfbb14275471e5ec956ad416b6194.jpg")
                        .apply(new RequestOptions().priority(Priority.LOW))
                        .into(iv);
                break;

            case R.id.but7:
                //加载回调后的图片
                //上面这段代码不要写成匿名内部类的机制,原因就是java的自动垃圾回收机制可能在图片还没有加载好的时候就已经把你的Target回收了
                //注意.with()里面的参数,Glide的请求是和传进去的Context共存亡的,如果传一个Activity进去,当Activity GG过后,你的请求也就GG了,但是如果这样传:.with(context.getApplicationContext() ).当你的Activity GG过后,请求还是会继续,回调还是会继续。
                //强制Glide返回一个Bitmap
                SimpleTarget<Bitmap> sim = new SimpleTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(Bitmap bitmap, Transition<? super Bitmap> transition) {
                    iv.setImageBitmap(bitmap);
                    }
                };
                Glide.with(this).asBitmap().load("http://pic1.win4000.com/wallpaper/8/55f91ad3a23ea.jpg").into(sim);
                break;

            case R.id.but8:
                //加载回调后的图片设置尺寸
                //强制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("http://www.hinews.cn/pic/0/14/00/69/14006911_715505.jpg")
                    .into(target);
                break;

            case R.id.but9:
                //加载图片圆角转换
                Glide.with(this)
                        .load("http://p4.so.qhmsg.com/t0199c5431414d2ea29.jpg")
                        .apply(new RequestOptions().transform(new GlideRoundTransform(this)))
                        .into(iv);
                break;

            case R.id.but10:
                //加载图片圆角转换2
                Glide.with(this)
                        .load("http://p2.cri.cn/M00/1C/C0/CqgNOlm4oreAHkbcAAAAAAAAAAA69.3200x2000.jpeg")
                        .apply(
                                new RequestOptions()
                                        .override(300)
                                        .transform(new RoundedCorners(20))
                        )
                        .into(iv);
                break;

            case R.id.but11:
                //加载图片ID占位图
                RequestOptions options = new RequestOptions()
                        .placeholder(R.mipmap.ic_launcher)//加载中
                        .error(R.mipmap.ee)//加载错误
                        .fallback(R.mipmap.ic_launcher)
                        .diskCacheStrategy(DiskCacheStrategy.NONE);
                Glide.with(this)
                        .load("http://p2.cri.cn/M00/1C/C0/CqgNOlm4oreAHkbcAAAAAAAAAAA69.3200x2000.jpeg")
                        .apply(options)
                        .into(iv);
                break;

            case R.id.but12:
                //加载图片Drawable占位图
                Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
                Drawable drawable = new BitmapDrawable(getResources(), bitmap);
                RequestOptions op = new RequestOptions().placeholder(drawable);
                Glide.with(this)
                        .load("http://p0.so.qhmsg.com/t010b9ba7c1e568dd3f66.jpg")
                        .apply(op)
                        .into(iv);
                break;

            case R.id.but13:
                //当加载图片传入null  会有图片显示
                RequestOptions op2 = new RequestOptions()
                        .fallback(R.mipmap.ic_launcher)
                        .diskCacheStrategy(DiskCacheStrategy.NONE);
                Glide.with(this)
                        .load(null)
                        .apply(op2)
                        .into(iv);
                break;

            case R.id.but14:
                //加载图片后修改宽高
                RequestOptions op3 = new RequestOptions().override(400, 400).fitCenter();
                Glide.with(this).load("http://img3.a0bi.com/upload/ttq/20160621/1466508726953.jpg")
                        .apply(op3)
                        .into(iv);
                break;

            case R.id.but15:
                //加载图片centerCrop
                RequestOptions op4 = new RequestOptions()
                        .centerCrop();
                Glide.with(this)
                        .load("http://img2.3lian.com/2014/f3/51/d/2.jpg")
                        .apply(op4)
                        .into(iv);
                break;

            case R.id.but16:
                //加载图片fitCenter
                Glide.with(this)
                        .load("http://www.285868.com/uploadfile/2016/1027/20161027102235543.jpg")
                        .apply(new RequestOptions().fitCenter())
                        .into(iv);
                //加载图片centerInside  就是把new RequestOptions().后面换成centerInside就行

                //11加载图片circleCrop  就是把new RequestOptions().后面换成circleCrop就行
                break;

            case R.id.but17:
                //加载动态图的第一帧
                Glide.with(this).asBitmap().
                        load("http://uploads.rayli.com.cn/2016/0823/1471943453795.gif").into(iv);
                break;

            case R.id.but18:
                //加载动态图成功
                //GIF加载,URL指向的资源必须是gif,如果是普通图片则不显示。
                //相反,如果指向正确但没有执行asGif方法,则只是作为普通图片展示
                Glide.with(this).asGif().load("http://uploads.rayli.com.cn/2016/0823/1471943453795.gif").into(iv);
                break;

            case R.id.but19:
                //加载本地视频缩略图
                Glide.with(this).load(Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"v.f40.mp4")))
                        .into(iv);
                break;
        }
    }
}




3.有一个实现圆的类

package comqq.example.hasee.myapplication;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;

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

import java.security.MessageDigest;


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

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) {

    }
}






4.主布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
    android:layout_width="match_parent" android:layout_height="match_parent"
    tools:context="comqq.example.hasee.myapplication.MainActivity"
    android:orientation="horizontal">

    <ScrollView
        android:layout_width="wrap_content"
        android:layout_height="match_parent">
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="wrap_content"
            android:layout_height="match_parent">
            <Button
                android:id="@+id/but1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="1.普通加载带提示"
                android:onClick="cc"
                />
            <Button
                android:id="@+id/but2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="2.加载gif"
                android:onClick="cc"/>
            <Button
                android:id="@+id/but3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="3.加载原图的缩略图"
                android:onClick="cc"/>
            <Button
                android:id="@+id/but4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="4.缩略图"
                android:onClick="cc"/>

            <Button
                android:id="@+id/but5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="5.加载设置不缓存"
                android:onClick="cc"/>
            <Button
                android:id="@+id/but6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="6.加载设置优先级"
                android:onClick="cc"/>
            <Button
                android:id="@+id/but7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="7.加载回调后的图片"
                android:onClick="cc"/>
            <Button
                android:id="@+id/but8"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="8.加载回调后的图片设置尺寸"
                android:onClick="cc"/>
            <Button
                android:id="@+id/but9"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="9.加载图片圆角转换"
                android:onClick="cc"/>
            <Button
                android:id="@+id/but10"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="10.加载图片圆角转换2"
                android:onClick="cc"/>
            <Button
                android:id="@+id/but11"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="11.加载图片ID占位图"
                android:onClick="cc"/>
            <Button
                android:id="@+id/but12"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="12.加载图片Drawable占位图"
                android:onClick="cc"/>
            <Button
                android:id="@+id/but13"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="13.当加载图片传入null  会有图片显示"
                android:onClick="cc"/>
            <Button
                android:id="@+id/but14"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="14.加载图片后修改宽高"
                android:onClick="cc"/>
            <Button
                android:id="@+id/but15"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="15.加载图片centerCrop"
                android:onClick="cc"/>
            <Button
                android:id="@+id/but16"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="16.加载图片fitCenter或..."
                android:onClick="cc"/>
            <Button
                android:id="@+id/but17"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="17.加载动态图的第一帧"
                android:onClick="cc"/>
            <Button
                android:id="@+id/but18"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="18.加载动态图成功"
                android:onClick="cc"/>
            <Button
                android:id="@+id/but19"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="19.加载本地视频缩略图"
                android:onClick="cc"/>
        </LinearLayout>
    </ScrollView>

    <ImageView
        android:id="@+id/iv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>




5.这下面是额外的效果

private void showDialog() {
        DialogUtil.showListDialog(this, "图片的形状的变换!", new String[]{
                "0,将图像剪切成圆",
                "1,将图像剪切成三角形",
                "2,将图像剪切成多角形",
                "3,将图像剪切成曲线形",
                "4,将图像剪切成圆角形",
        }, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                switch (which) {
                    case 0:
                        Glide.with(BecomeActivity.this)
                                .load(IMG_URL_0)
                                .apply(RequestOptions.bitmapTransform(new CropCircleTransformation()))
                                .into(iv);
                        break;
                    case 1:
                        MultiTransformation<Bitmap> transformation
                                = new MultiTransformation<>(new CenterCrop(), new MaskTransformation(R.mipmap.mask_trangle));

                        Glide.with(BecomeActivity.this)
                                .load(IMG_URL_1)
                                .apply(bitmapTransform(transformation))
                                .into(iv);
                        break;
                    case 2:
                        Glide.with(BecomeActivity.this)
                                .load(IMG_URL_2)
                                .apply(bitmapTransform(new MultiTransformation<>(new CenterCrop(), new MaskTransformation(R.mipmap.mask_starfish))))
                                .into(iv);
                        break;
                    case 3:
                        Glide.with(BecomeActivity.this)
                                .load(IMG_URL_3)
                                .apply(bitmapTransform(new MultiTransformation<>(new CenterCrop(), new MaskTransformation(R.drawable.mask_chat_right))))
                                .into(iv);
                        break;
                    case 4:
                        Glide.with(BecomeActivity.this)
                            .load(IMG_URL_4)
                            .apply(bitmapTransform(new RoundedCornersTransformation(45, 0,
                                    RoundedCornersTransformation.CornerType.BOTTOM)))
                            .into(iv);
                    break;
                }
            }
      });
    }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值