创建带有透明圆圈的视图

时间:2019-02-18 14:58:06

标签: android android-drawable shapes

我想创建一个带有圆角和居中圆形按钮的视图。目前,我正在使用带有圆形边框的矩形形状作为视图背景(绿色部分)和白色圆圈形状,其中包含按钮(带有android徽标的绿色按钮)。

只要背景(此刻为黄色/棕色,为了更好的可视化)具有与圆形相同的颜色,此方法就可以正常工作。

但是现在我要使用渐变背景:用透明圆圈实现相同外观的明智方法是什么?

我无法使用普通的android形状创建相同的外观(我想到了圆角)。

enter image description here

1 个答案:

答案 0 :(得分:0)

使用自定义视图解决了该问题。它将绘制一个填充有给定颜色的矩形。之后,将清除椭圆形。

我将发布一个最小化的代码(不包含自定义属性等),也许有朝一日能对某人有所帮助:

public class InvertedCircleView extends View {

    private Paint mPaint;
    private float mCanvasCenterX;

    private float mCenterCircleWidth, mCenterCircleHeight;


    public InvertedCircleView(Context context, AttributeSet attrs) {
        super(context, attrs);

        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    }

    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        mPaint.setColor(getResources().getColor(android.R.color.holo_green_dark));
        mPaint.setStyle(Paint.Style.FILL);
        canvas.drawPaint(mPaint);

        mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));

        mCenterCircleWidth = canvas.getWidth();        
        mCenterCircleHeight = canvas.getHeight();        

        mCanvasCenterX = canvas.getWidth() / 2;

        canvas.drawOval(mCanvasCenterX - (mCenterCircleWidth / 2),
                -mCenterCircleHeight,
                mCanvasCenterX + (mCenterCircleWidth / 2),
                mCenterCircleHeight,
                mPaint);
    }
}