Удалить флаг рисования в Android - PullRequest
75 голосов
/ 23 июля 2011

Мой код выглядит следующим образом:

    TextView task_text = (TextView) view.findViewById(R.id.task_text);
    task_text.setPaintFlags( task_text.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

Это приводит к появлению эффекта сквозного эффекта в тексте.Однако я хотел бы знать, как удалить установленный флаг и как определить, установлен ли этот флаг.

Я понимаю, что это побитовая операция, но я пробовал оба оператора ~ и -, ни работа.

Ответы [ 6 ]

173 голосов
/ 23 июля 2011

Чтобы убрать флаг, это должно сработать:

task_text.setPaintFlags( task_text.getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG));

Что означает установить все установленные флаги, кроме Paint.STRIKE_THRU_TEXT_FLAG.

Чтобы проверить, установлен ли флаг (Edit: на мгновение я забыл, что это java ...):

if ((task_text.getPaintFlags() & Paint.STRIKE_THRU_TEXT_FLAG) > 0)
22 голосов
/ 23 февраля 2015

Это также работает:

task_text.setPaintFlags(0);
6 голосов
/ 11 января 2019

В Котлине

task_text.paintFlags = task_text.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
4 голосов
/ 18 февраля 2017

Используйте исключающее ИЛИ оператор ^ вместо | с &(~) комбинацией:

// 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)
2 голосов
/ 07 марта 2017

| -------------------------------------------------- |
| <*> |Подчеркните с помощью 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);
}
0 голосов
/ 18 марта 2017

На мой взгляд, просто установите его флаг по умолчанию, это лучший выбор. В противном случае текст будет выглядеть неровным. Флаг по умолчанию в TextView (EditText расширяет TextView) равен

Paint.ANTI_ALIAS_FLAG

И установить новый Paintflag заменит предыдущий. Я сделал тест, чтобы проверить это. Итак, вот так:

task_text.setPaintFlags(Paint.ANTI_ALIAS_FLAG);
...