在 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上绘画却不行,这是为啥呢?

Android,如何从 UI 中删除视图?

Android Canvas设置绘画时重叠部分的处理模式含效果图

Android绘画板(普通绘画模式和缩放平移绘画模式)