Как отменить размытие фильтра маски в TextView в Android

Я использовал код из здесь, чтобы размыть текст:

    val radius = msgText.getTextSize() / 3
    val mTextFilter = BlurMaskFilter(radius, BlurMaskFilter.Blur.NORMAL)
    msgTextView.getPaint().setMaskFilter(mTextFilter)

... в какой-то момент мне захотелось отменить размытие, поэтому я попробовал:

msgTextView.getPaint().setMaskFilter(null)

но при этом нет убирает размытие текста, несмотря на его описание:

package android.graphics;

...

public class Paint {

...
/**
     * Set or clear the maskfilter object.
     * <p />
     * Pass null to clear any previous maskfilter.
     * As a convenience, the parameter passed is also returned.
     *
     * @param maskfilter May be null. The maskfilter to be installed in the
     *                   paint
     * @return           maskfilter
     */
    public MaskFilter setMaskFilter(MaskFilter maskfilter) {
        long maskfilterNative = 0;
        if (maskfilter != null) {
            maskfilterNative = maskfilter.native_instance;
        }
        nSetMaskFilter(mNativePaint, maskfilterNative);
        mMaskFilter = maskfilter;
        return maskfilter;
    }
...
}

Итак, я сбит с толку. Любая идея?

Вы пробовали msgTextView.invalidate() сразу после очистки фильтра?

RobCo 11.04.2018 14:21

Попробуйте это и дайте мне знать, mTextView.setLayerType(View.LAYER_TYPE_SOFTWARE,null); // Очистить предыдущий фильтр MaskFilter mTextView.getPaint().setMaskFilter(null);

Radhey 11.04.2018 14:39

Спасибо! Они оба работают! Я пойду с ответом от @Radhey, поскольку я уже устанавливаю mTextView.setLayerType (View.LAYER_TYPE_SOFTWARE, null); когда я устанавливаю размытие. Если вы добавите его в качестве ответа, я его принимаю.

Crocodile 11.04.2018 15:13
1
3
1 599
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш код идеален, просто вам нужно добавить эти строки в соответствии с вашими потребностями!

Чтобы установить эффект размытия

val radius = msgText.getTextSize() / 3
val mTextFilter = BlurMaskFilter(radius, BlurMaskFilter.Blur.NORMAL)
msgTextView.getPaint().setMaskFilter(mTextFilter)

Чтобы удалить эффект размытия

msgTextView.setLayerType(View.LAYER_TYPE_SOFTWARE,null);
// Clear any previous 
MaskFilter mTextView.getPaint().setMaskFilter(null);

Чтобы применить внутреннее размытие

applyBlurMaskFilter(mTextView, BlurMaskFilter.Blur.INNER);

Чтобы применить внешнее размытие

applyBlurMaskFilter(mTextView, BlurMaskFilter.Blur.OUTER);

Чтобы применить обычное размытие

applyBlurMaskFilter(mTextView, BlurMaskFilter.Blur.NORMAL);

Чтобы применить сплошное размытие

applyBlurMaskFilter(mTextView, BlurMaskFilter.Blur.SOLID);

здесь applyBlurMaskFilter() - это определяемый пользователем метод.

В моем эмуляторе api 24 после размытия текстового представления любые текстовые представления в приложении оставались в размытом режиме. Он применяется не к текущему текстовому представлению, а ко всем. В документации getPaint () есть предупреждение: / ** * Получает {@link TextPaint}, используемый для текста. * Используйте это только для просмотра свойств Paint, но не для их изменения. * @return Базовая краска, используемая для текста. * /

Mertcan Çüçen 02.04.2020 20:06

разместите свой код. надеюсь, вы применили правильную ссылку на свой TextView. попробуйте перепроверить и на реальном устройстве.

Radhey 03.04.2020 06:58

msgTextView.setLayerType (View.LAYER_TYPE_SOFTWARE, ноль); добавление этого перед установкой маски размытия устранило проблему. Спасибо

Mertcan Çüçen 03.04.2020 13:36

Другие вопросы по теме