Desenho sobre uma vista e todas as suas crianças

Estou tentando aplicar um efeito visual a um grupo de visualização. Minha ideia é pegar um bitmap do viewgroup, reduzi-lo, expandi-lo de volta e desenhá-lo sobre o viewgroup para obter um efeito de baixa qualidade.

Eu tenho mais do caminho usando esse código:

public class Blocker {

    private static final float RESAMPLE_QUALITY = 0.66f; // less than 1, lower = worse quality


    public static void block(Canvas canvas, Bitmap bitmap_old) {
        block(canvas, bitmap_old, RESAMPLE_QUALITY);
    }


    public static void block(Canvas canvas, Bitmap bitmap_old, float quality) {
        Bitmap bitmap_new = Bitmap.createScaledBitmap(bitmap_old, Math.round(bitmap_old.getWidth() * RESAMPLE_QUALITY), Math.round(bitmap_old.getHeight() * RESAMPLE_QUALITY), true);
        Rect from = new Rect(0, 0, bitmap_new.getWidth(), bitmap_new.getHeight());
        RectF to = new RectF(0, 0, bitmap_old.getWidth(), bitmap_old.getHeight());
        canvas.drawBitmap(bitmap_new, from, to, null);
    }
}

Eu simplesmente passo a tela para desenhar e um bitmap do que precisa ser reduzido + para cima e funciona bem.

public class BlockedLinearLayout extends LinearLayout {

    private static final String TAG = BlockedLinearLayout.class.getSimpleName();


    public BlockedLinearLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        applyCustomAttributes(context, attrs);
        setup();
    }


    public BlockedLinearLayout(Context context) {
        super(context);
        setup();
    }


    private void setup() {
        this.setDrawingCacheEnabled(true);
    }


    @Override
    public void draw(Canvas canvas) {
        super.draw(canvas);
        // block(canvas); If I call this here, it works but no updates
    }


    @Override
    public void onDraw(Canvas canvas) {
        // block(canvas); If I call this here, draws behind children, still no updates
    }

    private void block(Canvas canvas) {
        Blocker.block(canvas, this.getDrawingCache());
    }
}

O problema que estou tendo está no meu grupo de visão. Se eu executar o método de bloco no desenho do grupo de visão, ele atrairá tudo, mas nunca será atualizado quando as exibições filho mudarem. Eu rastreei chamadas de função com Log e o método de desenho parece estar em execução, mas nada muda.

Eu também tentei implementar isso no onDraw. Isso desenha o bitmap por trás de todas as visualizações de filhos e, novamente, elas não estão atualizando.

Alguém pode explicar como eu iria consertar isso?

questionAnswers(1)

yourAnswerToTheQuestion