在 Android 中删除绘画标志
Posted
技术标签:
【中文标题】在 Android 中删除绘画标志【英文标题】:Remove a Paint Flag in Android 【发布时间】:2011-10-11 10:15:34 【问题描述】:我的代码如下所示:
TextView task_text = (TextView) view.findViewById(R.id.task_text);
task_text.setPaintFlags( task_text.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
这会导致文本上出现删除线效果。但是,我想知道一旦设置了标志如何删除,以及如何检测标志已设置。
我知道这是按位运算,但我尝试了 ~ 和 - 运算符,都不起作用。
【问题讨论】:
【参考方案1】:要删除标志,这应该可以:
task_text.setPaintFlags( task_text.getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG));
这意味着设置所有设置的标志,Paint.STRIKE_THRU_TEXT_FLAG
除外。
检查是否设置了标志(编辑:我忘了它是 java...):
if ((task_text.getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) > 0)
【讨论】:
另一个简单的解决方案是简单地使用 Paint 上提供的各种方法:)【参考方案2】:这也有效:
task_text.setPaintFlags(0);
【讨论】:
我认为这是一个奇怪的情况,不使用正确的更正确,因为没有理由在这里检查条件,你只需要 2 个情况,设置 Paint.Flag 或删除它,很好的解决方案。 不要这样做。这会删除所有标志,而不仅仅是一个特定的。【参考方案3】:使用异或运算符^
代替|
和&(~)
组合:
// setup STRIKE_THRU_TEXT_FLAG flag if current flags not contains it
task_text.setPaintFlags(task_text.getPaintFlags() ^ Paint.STRIKE_THRU_TEXT_FLAG));
// second call will remove STRIKE_THRU_TEXT_FLAG
task_text.setPaintFlags(task_text.getPaintFlags() ^ Paint.STRIKE_THRU_TEXT_FLAG));
检查当前是否设置了标志:
if((task_text.getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) == Paint.STRIKE_THRU_TEXT_FLAG)
【讨论】:
谢谢@Sergey 这是这里唯一可靠的答案。 1)检查您要删除的标志是否存在。 2) 如果是,则使用 XOR 将其删除。我希望用户在检查要删除的标志是否存在之前停止投票涉及将 paintFlags 设置为 0 或使用 XOR 的答案。【参考方案4】:|---------------------------------------------- ----| ||用 textView 下划线: |------------------------------------------------- -|
|*|添加下划线:
txtVyuVar.setPaintFlags(txtVyuVar.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
|*|删除下划线:
txtVyuVar.setPaintFlags(txtVyuVar.getPaintFlags() ^ Paint.UNDERLINE_TEXT_FLAG);
|*|检查下划线:
if((txtVyuVar.getPaintFlags() & Paint.UNDERLINE_TEXT_FLAG) == Paint.UNDERLINE_TEXT_FLAG)
// Codo Todo
|*|切换下划线:
if((txtVyuVar.getPaintFlags() & Paint.UNDERLINE_TEXT_FLAG) == Paint.UNDERLINE_TEXT_FLAG)
txtVyuVar.setPaintFlags(txtVyuVar.getPaintFlags() ^ Paint.UNDERLINE_TEXT_FLAG);
else
txtVyuVar.setPaintFlags(txtVyuVar.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
【讨论】:
【参考方案5】:在我看来, 只需设置其默认标志是更好的选择。否则,文本将看起来参差不齐。 TextView(EditText 扩展 TextView)中的默认标志是
Paint.ANTI_ALIAS_FLAG
并设置一个新的paintflag 将替换以前的。我做了一个测试来验证它。所以,就像这样:
task_text.setPaintFlags(Paint.ANTI_ALIAS_FLAG);
【讨论】:
【参考方案6】:在 Kotlin 中
task_text.paintFlags = task_text.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
【讨论】:
不知道为什么它对我不起作用!tvPhone.autoLinkMask = Linkify.ALL
,然后是tvPhone.text = "1-800-12345"
,然后是tvPhone.paintFlags = tvPhone.paintFlags and Paint.UNDERLINE_TEXT_FLAG.inv()
【参考方案7】:
TextView details_actual_price; //并从你的xml文件中找到id
details_actual_price.setPaintFlags(details_actual_price.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案8】://用于适配器类
文本视图 details_actual_price; // 并找到 id holder.actulPrice.setPaintFlags(holder.actulPrice.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。【参考方案9】:我尝试使用 kotlin 位运算符在 kotlin 中使用上述方法,但结果很奇怪......
所以要删除我刚刚做的标志
view.paintflags = 0x00
【讨论】:
以上是关于在 Android 中删除绘画标志的主要内容,如果未能解决你的问题,请参考以下文章
Android - 用于查找已删除标志的 SQLite 查询 - 未找到异常 DELETED 列
如何在 Android Canvas 中使用“倒置”绘画进行绘制?
在浏览器和电子平台上,绘画可以工作,但在android平台上试图在canvas上绘画却不行,这是为啥呢?