根据背景反转油漆颜色

2023-11-26

我正在写一个自定义进度条。我想创建类似的效果

enter image description here

其中“50%”文本颜色动态更改为白色,而黑色条向右移动。使用“简单”的解决方案可能吗?我查阅了 PorterDuff、ColorFilters、xFermodes,似乎没有任何效果。有任何想法吗? ATM 我的代码看起来像这样:

    Rect r = new Rect(1, 1, m_width-1, m_height-1);
    canvas.drawRect(r, pWhiteFill);
    r = new Rect(1, 1, progressWidth, m_height-1);
    canvas.drawRect(r, pBlackFill);     
    canvas.drawText(String.valueOf(progress)+"%", m_width/2, m_height/2, pBlackTxtM);

有没有办法修改pBlackTxtM油漆根据“画布上”下方绘制的内容来改变颜色?


即使这个问题很老,我也想分享这个问题的解决方案。

你不能使用“反转”来做到这一点Paint,但您可以使用裁剪来实现它。

这个想法是绘制文本两次,一次为黑色,一次为白色,同时设置剪切区域以匹配条形图的相应部分。

下面是一些代码来概述这个想法:

// store the state of the canvas, so we can restore any previous clipping
canvas.save();

// note that it's a bad idea to create the Rect during the drawing operation, better do that only once in advance
// also note that it might be sufficient and faster to draw only the white part of the bar
Rect r = new Rect(1, 1, m_width-1, m_height-1);
canvas.drawRect(r, pWhiteFill);

// this Rect should be created when the progress is set, not on every drawing operation
Rect r_black = new Rect(1, 1, progressWidth, m_height-1);
canvas.drawRect(r_black, pBlackFill);

// set the clipping region to the black part of the bar and draw the text using white ink
String text = String.valueOf(progress)+"%";
canvas.cliprect(r_black);
canvas.drawText(text, m_width/2, m_height/2, pWhiteTxtM);

// draw the same text again using black ink, setting the clipping region to the complementary part of the bar
canvas.clipRect(r, Region.Op.XOR);
canvas.drawText(text, m_width/2, m_height/2, pBlackTxtM);

canvas.restore();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据背景反转油漆颜色 的相关文章

  • 使用DBFlow,如何加密已经存在的数据库?

    我正在使用 DBFlow 来处理项目中的数据库 并且我想对现有数据库进行加密 我知道我可能必须删除现有的未加密数据库并创建另一个加密数据库 我也知道我可以将 SQLCipher 与 DBFlow 一起使用 如上所述文档 https gith
  • Xamarin 分步向导 Android 视图

    我想在 Xamarin c 中构建一个 android 活动 用于逐步注册和 或信息 我怎样才能做这样的事情 谁能给我一个代码示例或其他东西 谢谢 基本上你需要使用一个名为 a 的元素ViewPager 并且每个页面都会不同Fragment
  • Android中将JSON数据存储到本地数据库

    好的 我创建了一个应用程序 它使用 JSON 从我的服务器检索数据 现在我想将检索到的数据存储在手机的本地存储 数据库中 我该怎么做 我是android编程新手 这是我从服务器收到的 JSON messages id 44 issender
  • 使用同一个侦听器的多个活动

    我有 4 个活动 它们都包含一个 xml 页脚 其中包含 4 个按钮 每个活动一个 我现在想为这些按钮设置 onclicklistener 它是页脚中的自制菜单 问题是 如何使用侦听器以便重用代码 我有两个想法 创建一个实现 onclick
  • Android Camera.takePicture() 有时不返回?

    我正在编写一个Android 拍照应用程序 该代码在 onPreviewFrame byte data Cameracamera 中从预览中获取帧后进行一些处理 问题在于 android hardware Camera 的函数 takePi
  • 虚拟回调接口

    在 Eclipse 为您创建的来自 Google 的示例主从流代码中 片段中包含以下内容 private Callbacks mCallbacks sDummyCallbacks public interface Callbacks pub
  • 写入 Android UI Automator 输出控制台

    我正在 Android UI Automator 上编写一个小包装器 通常我们可以在控制台看到测试用例的状态 我可以访问它并添加我自己的消息吗 我努力了System out println 但这没有用 有什么办法可以做到这一点吗 您可以使用
  • relativelayout导致动画不起作用?

    我有一个活动 其布局仅包含一个 VideoView 这是 XML
  • VOIP通话录音

    我正在开发一个在 android 中录制 VOIP 通话的项目 我没有找到任何解决方案 有很多应用程序支持手机上的 VOIP 录音 我找不到任何教程和帮助 立方体通话记录器 https play google com store apps
  • 更改语言 Flutter 的按钮

    我正在 Flutter 中构建一个应用程序 到目前为止 我正在使用 JSON 国际化 其中应用程序的语言基于用户手机中默认的语言 它工作得很好 但我想给用户有机会在不更改手机系统语言设置的情况下更改语言 只需单击按钮 然后应用程序即可更改语
  • 如何绘制部分位图圆弧?类似于圆形进度轮,但具有显示得越来越多的位图。

    我正在寻找的是一种以顺时针圆形方式显示图像的视图 当进度为 25 时 应显示前 90 度 当进度为 100 时 应绘制完整的 360 度 它与使用 canvas drawArc 非常接近 但此方法仅适用于 Paint 对象 不适用于位图 其
  • Jetpack Compose:制作全屏(绝对定位)组件

    我怎样才能在全屏渲染树的深处制作一个可组合的 类似于Dialog可组合作品 例如 当用户单击图像时 它会显示该图像的全屏预览 而无需更改当前路线 我可以用 CSS 来做到这一点position absolute or position fi
  • 如何在Android模拟器中隐藏应用程序图标?

    我有一个应用程序在启动完成后自动启动 但应用程序图标显示在android模拟器中 现在我想向用户隐藏该图标 这样用户就无法知道应用程序已启动 并且他们无法启动该应用程序手动申请 在您的 AndroidManifest xml 文件中 您可能
  • Expresso 的 Android 测试首选项片段

    我在通过 Expresso 测试我的代码时遇到问题 我写了这段代码 public class SettingsActivity extends Activity Override protected void onCreate Bundle
  • 如何知道我的应用程序的活动计数?

    我的应用程序中有多项活动 请考虑以下案例 Activity A 调用 Activity B B 调用 C 当用户按后退键时 C 生成通知并转到 B 现在再次按后退 因此将显示 A 再次按后退键也会终止 A 并显示通知 现在 当用户按下通知图
  • 通过 Gradle 和 Android Studio 构建和运行应用程序比通过 Eclipse 慢

    我有一个多项目 10 个模块 每次构建大约需要 20 30 秒 当我在 Android Studio 中按 运行 时 每次都必须等待才能重建应用程序 这非常慢 是否可以在 Android Studio 中自动化构建过程 或者您对如何加快此过
  • XML 配置中的 screenName 不起作用

    我刚刚在我的应用程序中添加了对 Google Analytics 分析 的支持 但我无法
  • onPrepareOptionsMenu 复制 ActionBar 中的项目

    当我使用 onPrepareOptionsMenu 添加菜单项时 该菜单项会在操作栏中复制其自身 我正在使用片段并在主要活动的 ActionBar 中创建初始菜单 如下所示 Override public boolean onCreateO
  • Android 从通知刷新 Activity

    我有一个程序 我在其中调用通知 如果您将其下拉 该通知将启动一个新活动 mNotificationManager NotificationManager getSystemService ns int icon R drawable sta
  • 我想测量 ListView 的高度 (getHight() = 0)

    我无法自己决定任务将是问 我想测量 ListView 的高度 无法捕捉渲染 ListView 的时刻 rssListView getHight 0 public class RSSactivity extends Activity publ

随机推荐

  • 如何在iOS中的UITableViewCell中制作渐变背景?

    我按照下面的教程使用 CAGradientLayer 在 UITableViewCell 中制作渐变背景 http cocoawithlove com 2009 08 adding shadow effects to uitableview
  • 将字符串转换为Scheme中的代码

    如何将字符串转换为PLT方案中相应的代码 不包含string gt input port方法 例如 我想转换这个字符串 1 0 1 0 0 进入这个列表 1 0 1 0 0 是否可以在不打开文件的情况下执行此操作 方案有程序read用于从输
  • onEdit(e) 在附加组件中不起作用

    我编写了一个脚本 在本机电子表格中使用时效果很好 我现在尝试将其作为附加组件发布 并且发现onEdit e 不工作 当onOpen e and onInstall e 工作正常 我已经查看了有关授权模式和安装 启用附加组件的文档 但我认为我
  • 无法禁用 Core i7 中的硬件预取器

    我在尝试禁用 Core i7 系统中的硬件预取器时遇到错误 我按照链接中的方法进行操作如何以编程方式禁用硬件预取 在我的系统中 grep i msr boot config uname r CONFIG X86 DEBUGCTLMSR y
  • 无法解析的外部符号 _declspec(dllimport)

    我在 Visual Studio 中为我的控制台应用程序创建了一个 DLL 在我的 DLL 中 我有一个名为 Dialog MainMenu 的类 其中有一个 cpp 文件和一个 h 文件 以下错误消息 错误9错误LNK2001 无法解析的
  • runST 与 unsafePerformIO 的实际影响

    我想要类似的东西 f forall m Mutable v PrimState m r gt m gt v r gt v r illegal signature f gs x runST do y lt thaw x foldM g gt
  • 如何在大量数字中插入空格以使其更具可读性?

    我想出了这个 因为 stackoverflow 上提供的其他示例是用 C 编写的 string number fmt ulong n cout lt lt lt lt n lt lt lt lt endl char s 128 sprint
  • MongoDB + Node.js:无法正确插入日期

    我一直在使用节点 mongoskin连接这两个 一切都很好 直到我查询了一些 日期 字段 我认为该字段应该作为 javascript 返回Date目的 但结果的类型是字符串 这对我来说很奇怪而且不方便 插入看起来像这样 var doc da
  • 根据Python列表从yaml文件中检索数据

    我在 ipython 工作 我有一个 Yaml 文件和一个与我的 Yaml 文件相对应的 thomas id 列表 thomas 文件下第三行 下面只是该文件的一小部分 完整的文件可以在这里找到 https github com 108mi
  • 为什么选择 MVVM?它的核心优势是什么? [复制]

    这个问题在这里已经有答案了 为什么在处理 WPF 时我们选择 MVVM 而不是 MVC 或 MVP 使用它我们可以获得什么额外的好处 Edit 说实话 今天我去面试 也被问到了这个问题 我回答像 INotifyPropertyChanged
  • 删除flash 9中的右键菜单

    是否可以使用actionscript 3禁用右键菜单 非常感谢任何帮助 您可以使用 stage showDefaultContextMenu false 隐藏除设置选项之外的所有内容
  • Python urllib2 自动填表并检索结果

    我希望能够在站点上查询运行该脚本的计算机的保修信息 如果需要 它应该能够填写表格 例如惠普服务站点的情况 然后能够检索生成的网页 我已经准备好解析返回的结果 html 我只是遇到了麻烦 需要做什么才能对需要放入字段中的数据进行 POST 然
  • @id 和 @+id 有什么区别?

    我刚刚开始使用android 已经完成了大约5个布局文件 然而 我刚刚意识到我一直在互换使用 id和 id 但我不确定两者之间的确切区别是什么 你需要使用 id当您为视图定义自己的 Id 时 正是来自docs 字符串开头的 at 符号 表示
  • Objective-C 中 nil、NIL 和 null 的区别

    我想知道之间的区别nil NIL and null 我用谷歌搜索了一下 发现了这个 nil gt 指向 Objective C 对象的空指针 NIL gt 指向 Objective C 类的空指针 null gt 指向原始类型的空指针或缺少
  • Spring中如何根据配置创建多个相同类型的bean?

    我正在尝试在 Spring 中创建指定数量的相同类型的 bean 我试过了 Bean name beanList public List
  • Git 列出不存在的遥控器

    我最近在 Git 存储库配置文件中对远程存储库进行了一些更改 我重命名了远程名称 将我的起源更改为另一个远程存储库并重命名我的旧起源 例如 我之前有过这样的 remote origin url blah blah remote future
  • org.hibernate.LazyInitializationException:无法初始化代理 - 无会话

    我有 2 台物理服务器 我的 Web 应用程序由负载均衡器管理它们 我总是得到 org hibernate LazyInitializationException 无法初始化代理 无会话 当其中一台服务器受到攻击而另一台服务器运行顺利且没有
  • 反序列化 JSON,属性名称中包含点

    我正在尝试将属性名称中带有点的 JSON 反序列化为键值格式 我正在使用内置的 ASP NET MVC 模型绑定 它似乎将点解释为对象表示法 而不仅仅是键值对象 有没有办法让它正确反序列化为忽略点的键值 这很重要 因为数据需要以这种格式再次
  • 如何在Angular2中上传文件

    我必须提交表格和图像 我已经尝试过这段代码 通过多种方式 但对我不起作用 有没有人有使用 angular2 上传文件的工作演示 请帮助我 组件 html
  • 根据背景反转油漆颜色

    我正在写一个自定义进度条 我想创建类似的效果 其中 50 文本颜色动态更改为白色 而黑色条向右移动 使用 简单 的解决方案可能吗 我查阅了 PorterDuff ColorFilters xFermodes 似乎没有任何效果 有任何想法吗