我正在尝试创建一个半透明的帮助叠加层,以便在用户首次打开应用程序时显示在我的活动的主屏幕上。我想通过“剪切”与按钮位置相对应的覆盖层部分来突出显示主布局中包含的按钮(并使用 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);
如果圆形区域一片漆黑,那一定是由于图形渲染问题,您可以在声明绘制对象之前使用下面的代码启用它。
if (android.os.Build.VERSION.SDK_INT >= 11) {
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
我想这应该可以解决你的问题
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)