编程语言
首页 > 编程语言> > Java-在Android中的视图中创建透明圆形切口

Java-在Android中的视图中创建透明圆形切口

作者:互联网

我正在尝试创建一个半透明的帮助叠加层,以在用户首次打开该应用程序时显示在我的活动的主屏幕上.我想通过“切出”覆盖层中与按钮位置相对应的部分来突出显示主布局中的按钮(并使用setContentView对其进行了放大),并使切口透明.

叠加层是通过程序创建的视图(扩展了RelativeLayout),该视图已添加到我的活动的主FrameLayout中,如下所示:

private void addHelpOverlay(){
    HelpOverlay help = new HelpOverlay(this);
    help.setBackgroundColor(Color.parseColor("#BB222222"));

    mainLayer.addView(help);
}


public class HelpOverlay extends RelativeLayout{

    public HelpOverlay(Context context){
        super(context);
    }

    @Override
    public void dispatchDraw(Canvas canvas){

        canvas.drawColor(Color.parseColor("#BB222222"));

        Paint mPaint = new Paint();
        mPaint.setColor(0xFFFFFF);
        mPaint.setAlpha(0);
        mPaint.setAntiAlias(true);

        canvas.drawCircle(buttonX, buttonY, 100, mPaint);        

        super.dispatchDraw(canvas);
    }
}

上面的代码实际上并没有显示任何内容,只是没有圆形切口的半透明布局.我认为这是因为它只是在半透明布局上方绘制一个透明圆圈.我真的很难做到这一点,任何建议将不胜感激!

解决方法:

尝试将PorterDuff添加到绘画对象中.这将使特定区域透明

Paint mPaint = new Paint();
    mPaint.setColor(0xFFFFFF);
    mPaint.setAlpha(0);
    mPaint.setAntiAlias(true);
    mPaint.setColor(Color.TRANSPARENT);
    mPaint.setXfermode(new PorterDuffXfermode(
                PorterDuff.Mode.CLEAR));
    canvas.drawCircle(buttonX, buttonY, 100, mPaint); 

如果在圆形区域中出现黑色斑点,这一定是由于图形渲染问题所致,则可以在声明paint object之前使用以下代码启用它.

 if (android.os.Build.VERSION.SDK_INT >= 11) {
            setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        }

我想这应该可以解决您的问题

标签:android-layout,android-view,android-canvas,java,android
来源: https://codeday.me/bug/20191122/2061762.html