Glide 图片加载库 与 Glide-transformations 图形转换

Glide的每个功能点进的介绍:

在gradle添加依赖:compile 'com.github.bumptech.glide:glide:3.8.0'

添加依赖网络权限:<uses-permission android:name="android.permission.INTERNET"/>

public class MainActivity extends AppCompatActivity {
    ImageView myImg;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    myImg = (ImageView) findViewById(R.id.myImg);
    //使用Glide 加载图片
    Glide.with(this).load("https://www.baidu.com/img/bdlogo.png").into(myImg);
       
    }
}

Glide 后续之 :Glide-transformations 图形转换工具:

在gradle添加依赖:compile 'jp.wasabeef:glide-transformations:2.0.1'

1.异步加载

ImageView targetImageView = (ImageView) findViewById(R.id.ImageView);

String imageUrl = "http://218.192.170.132/1.jpg";

Glide.with(context).load(imageUrl).into(targetImageView);

2.设置加载尺寸:

Glide.with(context).load(imageUrl).override(800, 800).into(imageView);

3.设置加载成功、失败图片

Glide .with(context).load(imageUrl).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(imageView);

4.设置加载动画

Glide.with(this).load(imageUrl).animate(R.anim.item_alpha_in).into(imageView);

R.anim.item_alpha_in.xml内容:

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">

<alpha android:duration="500" android:fromAlpha="0.0" android:toAlpha="1.0"/>

</set>

5.多样式的媒体加载

Glide.with(context)

.load(imageUrl);//传了一个0.1f 作为参数,Glide将会显示原始图像的10%的大小。如果原始图像有1000x1000像素,那么缩略图将会有100x100像素。

.thumbnail(0.1f);//设置缩略图支持:先加载缩略图 然后在加载全图

.asBitmap()//显示gif静态图片

.asGif();//显示gif动态图片

.into(imageView);

6.关于缓存

Glide.with(this).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);

//缓存参数
//ALL:缓存源资源和转换后的资源(即所有版本,默认行为)
//NONE:不作任何磁盘缓存。然而,默认的它将仍然使用内存缓存!
//SOURCE:仅缓存源资源(原来的全分辨率的图像)。
//在我们上面略缩图的例子中,将会只有一个1000x1000 像素的图片

//RESULT:缓存转换后的资源(最终的图像,即降低分辨率后的(或者是转换后的)设置跳过内存缓存

7.设置跳过内存缓存

Glide .with(this).load(imageUrl).skipMemoryCache(true).into(imageView);

//设置跳过内存缓存
//这意味着 Glide 将不会把这张图片放到内存缓存中去

//这里需要明白的是,这只是会影响内存缓存!Glide 将会仍然利用磁盘缓存来避免重复的网络请求。

8.清理缓存

Glide.get(this).clearDiskCache();//清理磁盘缓存 需要在子线程中执行

Glide.get(this).clearMemory();//清理内存缓存 可以在UI主线程中进行

9.动态转换

Glide.with(this).load(imageUrl).centerCrop().into(imageView);

10.自定义圆角 或 圆形 图片

public class MainActivity extends AppCompatActivity {
    ImageView myImg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myImg = (ImageView) findViewById(R.id.myImg);
        //Glide 加载 用户自定义的圆角或圆形图形
        Glide.with(MainActivity.this)
                .load("https://www.baidu.com/img/bdlogo.png")
                .transform(new GlideRoundTransform(MainActivity.this, 35)).into(myImg);
    }
}  
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;

public class GlideRoundTransform extends BitmapTransformation {

    private static float radius = 0f;
    private static int d=0;
    public GlideRoundTransform(Context context) {
        this(context, 4);
    }

    public GlideRoundTransform(Context context, int d) {
        super(context);
        this.d=d;
        this.radius =Resources.getSystem().getDisplayMetrics().density * d;//35* dp;
    }

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

    private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {
        if (source == null) return null;
        Bitmap result=null;
        if(d==0){//圆形
            int size = Math.min(source.getWidth(), source.getHeight());
            int x = (source.getWidth() - size) / 2;
            int y = (source.getHeight() - size) / 2;
            if (result == null) {
               result = Bitmap.createBitmap(source, x, y, size, size);
            }
            Canvas canvas = new Canvas(result);
            Paint paint = new Paint();
            paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
            paint.setAntiAlias(true);
            RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
            float r = size / 2f;
            canvas.drawCircle(r, r, r, paint);
        }else {//自定义角度
               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();
            paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
            paint.setAntiAlias(true);
            RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
            canvas.drawRoundRect(rectF, radius, radius, paint);
        }
        return result;
    }

    @Override public String getId() {
           if(d==0){
                  return  getClass().getName();//圆形
             }else{
                 return getClass().getName()+ Math.round(radius);//自定义角度
             }
    }
}
在gradle添加依赖:compile 'jp.wasabeef:glide-transformations:2.0.1'

Glide 后续之 :Glide-transformations 图形转换工具:

public class MainActivity extends AppCompatActivity {
    ImageView myImg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myImg = (ImageView) findViewById(R.id.myImg)
        //Glide-transformations 图形转换
        // :30为圆角半径 0为填充边界 CornerType.BOTTOM为设置的边角类型
        Glide.with(MainActivity.this)
           .load("https://www.baidu.com/img/bdlogo.png")
           .bitmapTransform(new RoundedCornersTransformation(MainActivity.this, 30, 0,
               RoundedCornersTransformation.CornerType.BOTTOM))
           .into(myImg);
    }
}

Glide . with (context)
. load(imageUrl)
.bitmapTransform( new CropTransformation(this)) //添加位图转换类型。CropTransformation原型加载

.into(targetImageView);

1.设置 圆形

 Glide.with(this)
      .load(url)
      .bitmapTransform(new CropCircleTransformation(this)) .into(mImageView2);

2.设置 正方形

Glide.with(this)
          .load(url)
          .bitmapTransform(new CropSquareTransformation(this)) .into(mImageView2);

3.设置 圆角

 Glide.with(this) .load(url) .bitmapTransform( new RoundedCornersTransformation(this,  100, 0, RoundedCornersTransformation.CornerType.ALL)  ) .into(mImageView2); 
  //构造方法 RoundedCornersTransformation(Context context, int radius, int margin, CornerType cornerType)
  // radius :圆角半径
  // margin :填充边界 
  // cornerType :边角类型(可以指定4个角中的哪几个角是圆角,哪几个不是)

4.设置 自定义矩形

 Glide.with(this) .load(url) .bitmapTransform(new CropTransformation(this, 600, 200, CropTransformation.CropType.CENTER)) .into(mImageView); // 构造方法  CropTransformation(Context context, int width, int height, CropType cropType)
// width : 剪裁宽度
// height : 剪裁高度
// cropType : 剪裁类型(指定剪裁位置,可以选择上、中、下其中一种)

5.设置 颜色转换

1.颜色滤镜

Glide.with(this)
          .load(url)
          .bitmapTransform(new ColorFilterTransformation(this, 0x7900CCCC)) .into(mImageView); // 使用构造方法 ColorFilterTransformation(Context context, int color)
// Color :蒙层颜色值

2.灰度级转换

 Glide.with(this)
          .load(url)
          .bitmapTransform(new GrayscaleTransformation(this))
          .into(mImageView2);

3.模糊处理

Glide.with(this)
          .load(url)
          .bitmapTransform(new BlurTransformation(this, 100, 2)) .into(mImageView); 
// 使用构造方法 BlurTransformation(Context context, int radius, int sampling) 
// radius : 离散半径/模糊度(单参构造器 - 默认25)
// sampling : 取样(单参构造器 - 默认1) 如果取2,横向、纵向都会每两个像素点取一个像素点(即:图片宽高变为原来一半)

4.遮罩掩饰(视图叠加处理)

 Glide.with(this)
          .load(url)
          .bitmapTransform(new MaskTransformation(this, R.mipmap.ic_launcher)) .into(mImageView); 
// 使用构造方法 MaskTransformation(Context context, int maskId)
// maskId :遮罩物文件ID

5.GPU过滤(需要依赖GPUImage库)

需依赖GPUImage库:
compile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.3.0'
 Glide.with(this)
          .load(url)
          .bitmapTransform(new ToonFilterTransformation(this, 0.2F, 10F)) .into(mImageView2);

// 使用构造方法 ToonFilterTransformation(Context context, float threshold, float quantizationLevels)
// threshold :阀值(单参构造器 - 默认0.2F)影响色块边界的描边效果
// quantizationLevels :量化等级(单参构造器 - 默认10.0F)影响色块色彩

6.乌墨色滤波器

 Glide.with(this)
          .load(url)
          .bitmapTransform(new SepiaFilterTransformation(this, 1.0F)) .into(mImageView2); 
// 使用构造方法 SepiaFilterTransformation(Context context, float intensity)
// intensity 渲染强度(单参构造器 - 默认1.0F)


7.对比度滤波器

Glide.with(this)
          .load(url)
          .bitmapTransform(new ContrastFilterTransformation(this, 3F)) .into(mImageView2); 
// 使用构造方法 ContrastFilterTransformation(Context context, float contrast)
// contrast 对比度 (单参构造器 - 默认1.0F)

8.反转滤波器

 Glide.with(this)
          .load(url)
          .bitmapTransform(new InvertFilterTransformation(this))
          .into(mImageView);

9.素描滤波器

Glide.with(this)
          .load(url)
          .bitmapTransform(new SketchFilterTransformation(this))
          .into(mImageView);


10.旋转滤波器

  Glide.with(this) .load(url) .bitmapTransform(new SwirlFilterTransformation(this, 1.0F, 0.4F, new PointF(0.5F, 0.5F))) .into(mImageView); 
// 使用构造方法 SwirlFilterTransformation(Context context, float radius, float angle, PointF center)
// radius 旋转半径[0.0F,1.0F] (单参构造器 - 默认0.5F)
// angle 角度[0.0F,无穷大)(单参构造器 - 默认1.0F)视图表现为旋转圈数
// center 旋转中心点 (单参构造器 - 默认new PointF(0.5F,0.5F))


猜你喜欢

转载自blog.csdn.net/qq_34075348/article/details/79892810
今日推荐