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

2024-07-01

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

在 Android 的视图中创建透明的圆形切口 的相关文章

  • 函数无法解析 Android NDK

    我正在尝试构建 NDK 项目 但遇到错误 这reverse在使用 JNI 和 NDK Android 的项目中无法解析该函数 您可以在附图中看到这一点 我已在路径和符号部分的项目属性中添加了路径 gt 也请参阅屏幕截图 None
  • 将 Android SDK 工具更新至修订版 14 后出现 Ant 问题

    安装 Android SDK 工具修订版 14 执行 ant version 时为 ant 版本 1 8 2 以在 Android 4 0 ICS 上安装和测试我们的应用程序后 我注意到我们的自动构建脚本现在失败了 构建脚本正在执行 ant
  • 在 Eclipse 中默认将类设为 Final 吗?

    有没有办法让 Eclipse 中的类默认为final 即 在保存操作中 还是在创建新类对话框中 这确实是一个 hack 但是您可以在 Eclipse 设置中设置以下代码模板 在 Java gt 代码样式 gt 代码模板 gt 代码 gt 新
  • Android 定期运行任务

    我想在 android 活动中定期运行一个方法 该方法会在 x 秒后更新某个字段 我知道它可以在timerTask中完成 但是最好的方法是什么 代码示例会很有帮助 你应该使用Handler和它的postDelayed功能 您可以在这里找到示
  • Android Studio 3.1 中任务“:app:transformClassesWithAndroidGradleClassShrinkerForDebug”执行失败

    我刚刚从 Android Studio 升级3 1到 Android Studio3 1 1 但仍然使用 Gradle 构建工具3 0 0 当我运行我的应用程序时 它会导致此错误 app transformClassesWithAndroi
  • Java:检查数组的相等性(顺序无关紧要)

    我有两个String数组 比方说 String s1 a b c String s2 c a b 这些数组应该相等 我想以 最干净 的方式检查它们的相等性 我尝试使用Arrays equals s1 s2 但我得到了一个错误的答案 我想这个
  • 使用 Spring Security 标记库时将异常映射到 404 页面

    将异常映射到 404 页面时 Spring Security 标记无法从安全上下文中找到身份验证信息 通过 真实 404 可以找到身份验证 我的 web xml
  • Android Studio:无法加载 dx.jar

    当我在 Android Studio 中运行我的模块时 出现以下错误 错误 Android Dex GradleDevBuild 无法加载 dx jar 我在网上无休无止地寻找解决方案 但一切都与 eclipse 有关 而与 Android
  • 从 Runnable 类内部访问共享变量

    我需要在主类的 main 方法中定义一个共享变量 我需要两个线程才能访问该共享变量 我通过实现 Runnable 接口并实现该接口的抽象 run 方法来创建线程 如何从实现 Runnable 接口的类中定义的 run 方法中引用 Main
  • 无法解析 styles.xml 中的符号“Theme.AppCompat.Light.DarkActionBar”

    Theme AppCompat Light DarkActionBar is not compiling in styles xml I have added compile com android support appcompat v7
  • 如何使用 Spring 使用注释执行基于构造函数的依赖注入?

    好的 如果我需要在构造函数中放入一些原始值 我该怎么做 Autowired public CustomBean String name Qualifier SuperBean SuperBean superBean super this s
  • Spring Boot Rest - 如何配置 404 - 找不到资源

    我得到了一个有效的春季靴休息服务 当路径错误时 它不会返回任何内容 完全没有反应 同时它也不会抛出错误 理想情况下 我预计会出现 404 未找到错误 我有一个 GlobalErrorHandler ControllerAdvice publ
  • 如何在没有丑陋的instanceof的情况下处理Retrofit Rx onError中的不同类型的错误

    我想知道您在改造 Rx onError 中处理不同类型的错误 如 http 异常 无互联网连接异常等 而不使用instanceof就像这里建议的那样 如何使用 RxJava 处理 Retrofit 2 中的网络错误 https stacko
  • Android背景音乐服务

    我正在 Android 中开发一个娱乐应用程序 我想播放背景音乐 并且我想为此使用服务 应用程序有 3 个活动 所有活动都必须播放音乐 此外 当活动暂停时 音乐必须暂停并在被破坏时停止 谁能告诉我该怎么做 有链接或例子吗 谢谢 无需服务即可
  • Java双精度求和问题

    我想知道为什么我会收到此错误 这是Eclipse调试的显示日志 var double 2 8 tot getIva java lang Double 0 17 var tot get double 2 9699999999999998 我不
  • RMI服务器异常

    当我尝试运行使用远程注册表的服务器时 我收到以下来自 RMI 的异常 我的 Server2 类中 main 方法的注册表代码是 Registry registry LocateRegistry getRegistry 192 168 1 4
  • commons-logging 定义的类与 Android Studio 更新后 Android 现在提供的类冲突

    我已经将 Android Studio 更新到版本 3 现在似乎无法编译我之前编译的项目而没有错误 错误信息如下 错误 错误 commons logging 定义了与以下内容冲突的类 Android 现在提供的类 解决方案包括寻找更新的 没
  • 数组的浅拷贝,为什么不能简单地做newArr = oldArr?

    假设我有一个整数数组 orig 我想浅复制它 所以我不能这样做 int shallow orig 我的教授说 对于原语 浅复制和深复制本质上是相同的 因为我们必须复制数组的每个索引 但是将整个数组设置为等于另一个数组会起到同样的作用 对吧
  • 消息应用程序的 ListView 滚动后显示错误的 listItem 布局

    我知道stackoverflow上已经发布了很多类似的问题 所以请不要以为我没有高低搜索过 我认为我的问题只是来自于现在完全理解 listViews 和列表项的生命周期 我有一个列表视图 可以包含两种类型的消息 出站或入站 最初 我的 li
  • 允许轻松打印字节码指令*包括*参数的库

    我正在寻找一个图书馆easily让我查看方法的给定字节码 例子 ALOAD 0 INVOKEVIRTUAL ns c m I IRETURN 我都尝试过 ASM 我实际上可以让它打印指令和参数 但是我很难理解它的整个访问者范例 也就是说 我

随机推荐

  • OSM:将球面墨卡托投影坐标“EPSG:900913”转换为“EPSG:4326”坐标

    我正在使用带有图层的地图 来自示例 var lonLat new OpenLayers LonLat 40 4088576 86 8576718 transform new OpenLayers Projection EPSG 4326 t
  • Django 3.1:带有异步生成器的 StreamingHttpResponse

    Django 3 1 文档 https docs djangoproject com en 3 1 topics async async views 7E text The 20main 20benefits 20are 20the 20a
  • 从 HealthKit 监控心率 --> HKAnchoredObjectQuery 仅在 applicationDidBecomeActive 之后调用(BUG 或 FEATURE?)

    我正在编写一个简单的应用程序 每当将新的健康率值写入 HealthKit 时 就可以从 HealthKit 监控心率 HKQuantityTypeIdentifierHeartRate 正如在 WWDC2015 第 203 场会议 上看到的
  • OpenQA.Selenium.WebDriverException: '未知错误: ChromeDriver 在通过 C# Selenium 发送表情符号时仅支持 BMP 中的字符

    我正在尝试向按键发送表情符号 我尝试通过处理信号 来发送它 但它引发了此异常 OpenQA Selenium WebDriverException unknown error ChromeDriver only supports chara
  • 将 timeout() 与 retryWhen() 结合起来

    我正在创建一个简单的应用程序 用于使用 RxAndroidBle 库连接蓝牙设备 干杯 大家干得好 我遇到的情况是 有时当我连接到设备时 我会收到状态为 133 的 Gatt 错误 我知道这可能会发生 所以我想做的就是在发生错误时重试所有操
  • 按成员列表的长度对列表列表进行排序

    我有来自作为 S4 对象类型的包 apcluster 的输出 其中一个成员是确定找到的每个簇的成员的列表列表 我想按长度 最大的簇 对该列表进行排序 我的代码现在看起来像 ap result lt apcluster args cluste
  • instanceof 与 getClass( )

    我发现使用时性能有所提高getClass and 运算符结束instanceOf操作员 Object str new Integer 2000 long starttime System nanoTime if str instanceof
  • 如何在调试中查看活动堆栈?

    我遇到一个问题 我的一项活动在之后弹出I think我完成了 有没有办法查看活动的堆栈 1 You can use Hierarchy Viewer within Eclipse You can see all connected devi
  • in_array 与 isset - 性能

    考虑以下代码片段 例子 1 array Array 1 2 3 4 5 6 7 array test Array 3 5 4 7 3 6 7 8 8 9 3 foreach array test as value if in array v
  • D3 沿路径段过渡并在坐标值处暂停

    我希望能够单击一个圆 坐标点 将标记带到圆圈的位置并在圆圈的位置暂停 然后沿着路径再次恢复 此外 我想在标记暂停在其上时激活一个圆圈 单击它们 或单击其 Voronoi 单元格 我的目的是最终为圆坐标提供一个点击功能 我想我需要将路径坐标的
  • 如何在VBA中给单元格填充颜色?

    我想为当前工作表中具有 N A 值的单元格着色 为了做到这一点 我使用以下宏 Sub ColorCells Dim Data As Range Dim cell As Range Set currentsheet ActiveWorkboo
  • 替换 pytest 中的测试用例继承?

    背景 在 Python 中unittest https docs python org 3 library unittest html在框架中 在一组基本测试上使用继承来将整套测试应用于新问题 并且偶尔添加其他测试是一种相当常见的习惯用法
  • AddKeysToAgent 是 ssh 配置在 Mac 上不起作用

    您好 我的 ssh 配置文件设置为自动将 ssh 密钥添加到 ssh 代理 然而 目前它不起作用 它之前正在工作 我更新了 bitbucket 的 ssh 密钥 但它不再起作用 当我重新启动时 我必须使用 ssh add K 选项手动添加
  • C++地址运算符的用途? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么要使用指针 https stackoverflow com questions 162941 why use pointers 我知道 C 的作用 但它能用来做什么呢 当在调用站点使用时 用于将
  • Python 元组列表到 int 列表

    所以我有x 12 1 3 元组列表 我想要x 12 1 3 整数列表 以最好的方式可能 你能帮忙吗 你没有说 最好 是什么意思 但大概你的意思是 最Pythonic 或 最易读 或类似的东西 F3AR3DLEGEND 给出的列表理解可能是最
  • 你应该捕获所有异常吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 PopUp 插件 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我尝试搜索插件 jquery 来创建评论弹出窗口 但我不知道如何使用它以及支持 Popup 的插件是什么 任何人都可以帮我展示简单的代码并
  • 如何将两个矩阵的列与所有组合相乘

    我喜欢将具有相同行的两个矩阵的列的所有可能组合相乘 这意味着两个矩阵 例如a 3x3 and b 3x4 将生成带有元素的 3x4 矩阵a i j a k j i and k表示从 1 到 3 的行 并且j代表从 1 到 4 的列 我创建了
  • 使用 writeBytes 的 Java 客户端套接字

    我正在从缓冲区读取字符串并将其写入服务器 我遇到的问题是 当我打开套接字并循环写入时 服务器永远不会收到该字符串 当我使用这个时 try Socket send new Socket localhost 1490 DataOutputStr
  • 在 Android 的视图中创建透明的圆形切口

    我正在尝试创建一个半透明的帮助叠加层 以便在用户首次打开应用程序时显示在我的活动的主屏幕上 我想通过 剪切 与按钮位置相对应的覆盖层部分来突出显示主布局中包含的按钮 并使用 setContentView 进行膨胀 并使剪切部分透明 覆盖层是