Veja o processo de desenho

 O processo de desenho do View é realmente muito simples. As notas oficiais explicam claramente as etapas de cada etapa:

1. Pinte o fundo, se desejar.

2. Salve a camada de tela atual.

3. Desenhe o conteúdo da Visualização.

4. Desenhe a View filha.

5. Se desejar, desenhe as bordas esmaecidas da Visualização, que são semelhantes a um efeito de sombra.

6. Desenhe decorações, como barras de rolagem.

Entre eles, 2 e 5 podem ser pulados diretamente. Vejamos as etapas restantes.

1. Desenhe o fundo

 private void drawBackground(Canvas canvas) {
        final Drawable background = mBackground;
        if (background == null) {
            return;
        }

        setBackgroundBounds();

        // Attempt to use a display list if requested.
        if (canvas.isHardwareAccelerated() && mAttachInfo != null
                && mAttachInfo.mThreadedRenderer != null) {
            mBackgroundRenderNode = getDrawableRenderNode(background, mBackgroundRenderNode);

            final RenderNode renderNode = mBackgroundRenderNode;
            if (renderNode != null && renderNode.hasDisplayList()) {
                setBackgroundRenderNodeProperties(renderNode);
                ((RecordingCanvas) canvas).drawRenderNode(renderNode);
                return;
            }
        }

        final int scrollX = mScrollX;
        final int scrollY = mScrollY;
        if ((scrollX | scrollY) == 0) {
            background.draw(canvas);
        } else {
            canvas.translate(scrollX, scrollY);
            background.draw(canvas);
            canvas.translate(-scrollX, -scrollY);
        }
    }

Como você pode ver no código a seguir, os parâmetros de deslocamento scrollX e scrollY são levados em consideração ao desenhar o plano de fundo. Se houver um valor de deslocamento diferente de 0, o plano de fundo será desenhado na tela de deslocamento.

 if ((scrollX | scrollY) == 0) {
            background.draw(canvas);
        } else {
            canvas.translate(scrollX, scrollY);
            background.draw(canvas);
            canvas.translate(-scrollX, -scrollY);
        }

Acho que você gosta

Origin blog.csdn.net/howlaa/article/details/128717074
Recomendado
Clasificación