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行,改變左下角,右下角為直角的效果,附上效果圖