【问题标题】:Create view with transparent circle创建带有透明圆圈的视图
【发布时间】:2019-02-18 14:58:05
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android android-drawable shapes


    【解决方案1】:

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

    我将发布一个最小化的代码(没有自定义属性等),也许有一天它会对某人有所帮助:

    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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 2016-06-17
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      相关资源
      最近更新 更多