使用Glide改變圖片的圓角


1.先看以下是不是您想要的效果(四個角都是圓角,以下還有左上,右上角的圓角),同時還附帶預加載以及加載失敗圖片的效果

2.使用Glide之前我們先引入依賴

implementation 'com.github.bumptech.glide:glide:4.9.0'

3.然后創建一個改變圓角的GildeRoundTransform類

 1 public class GlideRoundTransform extends BitmapTransformation {
 2     private static float radius = 0f;
 3 
 4     public GlideRoundTransform() {
 5         this(4);
 6     }
 7 
 8     public GlideRoundTransform(int dp) {
 9         super();
10         this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
11     }
12 
13 
14     @Override
15     protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) {
16         //變換的時候裁切
17         Bitmap bitmap = TransformationUtils.centerCrop(pool, toTransform, outWidth, outHeight);
18         return roundCrop(pool, bitmap);
19     }
20 
21     @Override
22     public void updateDiskCacheKey(MessageDigest messageDigest) {
23 
24     }
25 
26 
27     private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {
28         if (source == null) {
29             return null;
30         }
31         Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
32         if (result == null) {
33             result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
34         }
35         Canvas canvas = new Canvas(result);
36         Paint paint = new Paint();
37         paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
38         paint.setAntiAlias(true);
39         RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
40         canvas.drawRoundRect(rectF, radius, radius, paint);
41         //左上角、右上角圓角
42 //        RectF rectRound = new RectF(0f, 100f, source.getWidth(), source.getHeight());
43 //        canvas.drawRect(rectRound, paint);
44         return result;
45     }
46 }

4.然后在需要的地方引用

1 RequestOptions options = new RequestOptions()
2                 .centerCrop()
3                 .placeholder(R.mipmap.ic_launcher_round) //預加載圖片
4                 .error(R.drawable.ic_launcher_foreground) //加載失敗圖片
5                 .priority(Priority.HIGH) //優先級
6                 .diskCacheStrategy(DiskCacheStrategy.NONE) //緩存
7                 .transform(new GlideRoundTransform(5)); //圓角
8 Glide.with(context).load(list.get(position).getImage()).apply(options).into(holder.imageView);

5.在GlideRoundTransform類中42、43行,改變左下角,右下角為直角的效果,附上效果圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM