Я использовал код из здесь, чтобы размыть текст:
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;
}
...
}
Итак, я сбит с толку. Любая идея?
Попробуйте это и дайте мне знать, mTextView.setLayerType(View.LAYER_TYPE_SOFTWARE,null);
// Очистить предыдущий фильтр MaskFilter mTextView.getPaint().setMaskFilter(null);
Спасибо! Они оба работают! Я пойду с ответом от @Radhey, поскольку я уже устанавливаю mTextView.setLayerType (View.LAYER_TYPE_SOFTWARE, null); когда я устанавливаю размытие. Если вы добавите его в качестве ответа, я его принимаю.
Ваш код идеален, просто вам нужно добавить эти строки в соответствии с вашими потребностями!
Чтобы установить эффект размытия
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 Базовая краска, используемая для текста. * /
разместите свой код. надеюсь, вы применили правильную ссылку на свой TextView. попробуйте перепроверить и на реальном устройстве.
msgTextView.setLayerType (View.LAYER_TYPE_SOFTWARE, ноль); добавление этого перед установкой маски размытия устранило проблему. Спасибо
Вы пробовали
msgTextView.invalidate()
сразу после очистки фильтра?