android 设置圆角图片实现代码


在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`等图片加载库都提供了内置的圆角转换功能,这些功能通常更加灵活和强大。