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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值