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

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

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

我正在尝试创建一个半透明的帮助叠加层,以在用户首次打开该应用程序时显示在我的活动的主屏幕上.我想通过“切出”覆盖层中与按钮位置相对应的部分来突出显示主布局中的按钮(并使用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);        }

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

总结

以上是内存溢出为你收集整理的Java-在Android中的视图中创建透明圆形切口全部内容,希望文章能够帮你解决Java-在Android中的视图中创建透明圆形切口所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1075860.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存