Android开发imageview实现上面两个圆角下面两个直角的效果
效果图:
实现代码:
RequestOptions options1 = new RequestOptions() .centerCrop() .placeholder(R.drawable.error) .error(R.drawable.error) .transform(new GlideRoundTransform(10));
Glide.with(mContext).load(url).apply(options1).into(iv_icon); GlideRoundTransform类: 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 android.support.annotation.NonNull; import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; import com.bumptech.glide.load.resource.bitmap.TransformationUtils; import java.security.MessageDigest; public class GlideRoundTransform extends BitmapTransformation { private static float radius = 0f; public GlideRoundTransform() { this(4); } public GlideRoundTransform(int dp) { super(); this.radius = Resources.getSystem().getDisplayMetrics().density * dp; } @Override protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) { //变换的时候裁切 Bitmap bitmap = TransformationUtils.centerCrop(pool, toTransform, outWidth, outHeight); return roundCrop(pool, bitmap); } @Override public void updateDiskCacheKey(MessageDigest messageDigest) { } private static Bitmap roundCrop(BitmapPool pool, Bitmap source) { if (source == null) { return null; } 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(); 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); //上边圆角 下边直角 (注释掉下边这两行代码 全是圆角) RectF rectRound = new RectF(0f, 100f, source.getWidth(), source.getHeight()); canvas.drawRect(rectRound, paint); return result; } }