Search code examples
androidmaskblur

How to undo a mask filter blur on a TextView in Android


I used the code from here to blur some text:

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

...at some point I wanted to undo the blur so I tried:

msgTextView.getPaint().setMaskFilter(null)

but that does not clear the blur from the text despite its description:

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;
    }
...
}

So I am confused. Any idea?


Solution

  • Your code is perfect just you need to add these lines as per your need!

    To set Blur effect

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

    To remove Blur effect

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

    To apply inner Blur

    applyBlurMaskFilter(mTextView, BlurMaskFilter.Blur.INNER);
    

    To apply outer Blur

    applyBlurMaskFilter(mTextView, BlurMaskFilter.Blur.OUTER);
    

    To apply normal Blur

    applyBlurMaskFilter(mTextView, BlurMaskFilter.Blur.NORMAL);
    

    To apply solid Blur

    applyBlurMaskFilter(mTextView, BlurMaskFilter.Blur.SOLID);
    

    here applyBlurMaskFilter() is user defined method.