在Android中设置圆角图片,可以通过多种方式实现,其中一种简洁高效的方式是使用`Glide`库结合`Transformation`接口。但考虑到直接代码实现,我们可以使用`BitmapShader`和`Paint`在`Canvas`上绘制圆角图片。这里提供一个简单的自定义`ImageView`来实现这一功能:
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Shader;
import android.util.AttributeSet;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatImageView;
public class RoundImageView extends AppCompatImageView {
private float roundRadius = 0f; // 圆角半径
public RoundImageView(Context context) {
super(context);
}
public RoundImageView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public RoundImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
// 设置圆角半径
public void setRoundRadius(float roundRadius) {
this.roundRadius = roundRadius;
invalidate(); // 重新绘制
}
@Override
protected void onDraw(Canvas canvas) {
// 获取图片
Bitmap drawableBitmap = ((BitmapDrawable) getDrawable()).getBitmap();
// 创建Shader
BitmapShader bitmapShader = new BitmapShader(drawableBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
// 创建Paint对象,并设置Shader
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setShader(bitmapShader);
// 绘制圆角矩形
RectF rect = new RectF(0, 0, drawableBitmap.getWidth(), drawableBitmap.getHeight());
canvas.drawRoundRect(rect, roundRadius, roundRadius, paint);
}
}
使用此`RoundImageView`类代替普通的`ImageView`,在布局文件中或在代码中创建其实例,并通过调用`setRoundRadius(float roundRadius)`方法设置圆角半径。注意,此实现假设了`ImageView`的`drawable`已经是一个`BitmapDrawable`,因此它可能不适用于所有情况(比如`VectorDrawable`)。在实际应用中,你可能需要添加额外的检查或转换逻辑来处理不同类型的`Drawable`。
另外,如果你倾向于使用库来简化开发,那么`Glide`或`Picasso`等图片加载库都提供了内置的圆角转换功能,这些功能通常更加灵活和强大。