RenderNode Classe

Definição

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

[Android.Runtime.Register("android/graphics/RenderNode", ApiSince=29, DoNotGenerateAcw=true)]
public sealed class RenderNode : Java.Lang.Object
[<Android.Runtime.Register("android/graphics/RenderNode", ApiSince=29, DoNotGenerateAcw=true)>]
type RenderNode = class
    inherit Object
Herança
RenderNode
Atributos

Comentários

RenderNode é usado para criar hierarquias de renderização acelerada por hardware. Cada RenderNode contém uma lista de exibição, bem como um conjunto de propriedades que afetam a renderização da lista de exibição. RenderNodes são usados internamente para todos os Modos de Exibição por padrão e normalmente não são usados diretamente.

RenderNodes são usados para dividir o conteúdo de renderização de uma cena complexa em partes menores que podem ser atualizadas individualmente mais baratamente. Atualizar parte da cena só precisa atualizar a lista de exibição ou as propriedades de um pequeno número de RenderNode em vez de redesenhar tudo do zero. Um RenderNode só precisa de sua lista de exibição regravada quando seu conteúdo sozinho deve ser alterado. RenderNodes também pode ser transformado sem gravar novamente a lista de exibição por meio das propriedades de transformação.

Um editor de texto pode, por exemplo, armazenar cada parágrafo em seu próprio RenderNode. Assim, quando o usuário insere ou remove caracteres, somente a lista de exibição do parágrafo afetado precisa ser registrada novamente.

<h3>Aceleração de hardware</h3>

RenderNodes pode ser desenhado usando um RecordingCanvas. Eles não têm suporte no software. Sempre certifique-se de que o android.graphics.Canvas uso para renderizar uma lista de exibição seja acelerada por hardware usando android.graphics.Canvas#isHardwareAccelerated().

<h3>Criando um RenderNode</h3>

RenderNode renderNode = new RenderNode("myRenderNode");
                renderNode.setPosition(0, 0, 50, 50); // Set the size to 50x50
                RecordingCanvas canvas = renderNode.beginRecording();
                try {
                    // Draw with the canvas
                    canvas.drawRect(...);
                } finally {
                    renderNode.endRecording();
                }

<h3>Desenhando um RenderNode em um Modo de Exibição</h3>

protected void onDraw(Canvas canvas) {
                    if (canvas.isHardwareAccelerated()) {
                        // Check that the RenderNode has a display list, re-recording it if it does not.
                        if (!myRenderNode.hasDisplayList()) {
                            updateDisplayList(myRenderNode);
                        }
                        // Draw the RenderNode into this canvas.
                        canvas.drawRenderNode(myRenderNode);
                    }
                }

<h3>Liberando recursos</h3>

Esta etapa não é obrigatória, mas recomendada se você quiser liberar recursos mantidos por uma lista de exibição o mais rápido possível. Mais significativamente qualquer bitmaps que ele possa conter.

// Discards the display list content allowing for any held resources to be released.
                // After calling this
                renderNode.discardDisplayList();

<Propriedades< h3>/h3>

Além disso, um RenderNode oferece várias propriedades, como #setScaleX(float) ou #setTranslationX(float), que podem ser usadas para afetar todos os comandos de desenho registrados dentro. Por exemplo, essas propriedades podem ser usadas para mover um grande número de imagens sem emitir novamente todas as chamadas individuais canvas.drawBitmap() .

private void createDisplayList() {
                    mRenderNode = new RenderNode("MyRenderNode");
                    mRenderNode.setPosition(0, 0, width, height);
                    RecordingCanvas canvas = mRenderNode.beginRecording();
                    try {
                        for (Bitmap b : mBitmaps) {
                            canvas.drawBitmap(b, 0.0f, 0.0f, null);
                            canvas.translate(0.0f, b.getHeight());
                        }
                    } finally {
                        mRenderNode.endRecording();
                    }
                }

                protected void onDraw(Canvas canvas) {
                    if (canvas.isHardwareAccelerated())
                        canvas.drawRenderNode(mRenderNode);
                    }
                }

                private void moveContentBy(int x) {
                     // This will move all the bitmaps recorded inside the display list
                     // by x pixels to the right and redraw this view. All the commands
                     // recorded in createDisplayList() won't be re-issued, only onDraw()
                     // will be invoked and will execute very quickly
                     mRenderNode.offsetLeftAndRight(x);
                     invalidate();
                }

Algumas das propriedades podem, a princípio, parecer redundantes, como #setElevation(float) e #setTranslationZ(float). O motivo dessas duplicatas é permitir uma separação entre usos estáticos e transitórios. Por exemplo, considere um botão que aumenta de 2dp para 8dp quando pressionado. Para conseguir que um aplicativo decida definirElevation(2dip) e, em seguida, pressione para animar setTranslationZ como 6dip. Combinado, isso alcança o valor de 8dip desejado final, mas a animação só precisa se preocupar em animar o lift da imprensa sem precisar saber o valor inicial. #setTranslationX(float) e #setTranslationY(float) são fornecidos da mesma forma para usos de animação, apesar da sobreposição funcional com #setPosition(Rect).

A matriz de transformação do RenderNode é computada no tempo de renderização da seguinte maneira:

Matrix transform = new Matrix();
                transform.setTranslate(renderNode.getTranslationX(), renderNode.getTranslationY());
                transform.preRotate(renderNode.getRotationZ(),
                        renderNode.getPivotX(), renderNode.getPivotY());
                transform.preScale(renderNode.getScaleX(), renderNode.getScaleY(),
                        renderNode.getPivotX(), renderNode.getPivotY());

A matriz de transformação de tela atual, que é traduzida para a posição do RenderNode, é multiplicada pela matriz de transformação do RenderNode. Portanto, a ordenação de setters de propriedade de chamada não afeta o resultado. Isso quer dizer que:

renderNode.setTranslationX(100);
                renderNode.setScaleX(100);

é equivalente a:

renderNode.setScaleX(100);
                renderNode.setTranslationX(100);

<h3>Threading</h3>

O RenderNode pode ser criado e usado em qualquer thread, mas não é thread-safe. Somente um único thread pode interagir com um RenderNode a qualquer momento. É fundamental que o RenderNode seja usado apenas no mesmo thread com o qual ele é desenhado. Por exemplo, ao usar RenderNode com uma exibição personalizada, esse RenderNode só deve ser usado no thread da interface do usuário.

<h3>Quando renderizar< novamente/h3>

Muitos dos métodos de mutação RenderNode, como #setTranslationX(float), retornam um booliano indicando se o valor realmente foi alterado ou não. Isso é útil para detectar se um novo quadro deve ser renderizado ou não. Um uso típico seria semelhante a:

public void translateTo(int x, int y) {
                    boolean needsUpdate = myRenderNode.setTranslationX(x);
                    needsUpdate |= myRenderNode.setTranslationY(y);
                    if (needsUpdate) {
                        myOwningView.invalidate();
                    }
                }

Isso é marginalmente mais rápido do que fazer uma verificação antecipada mais explícita se o valor foi alterado comparando o valor desejado em relação à #getTranslationX() medida que minimiza as transições de JNI. O mecanismo real de solicitação de um novo quadro a ser renderizado dependerá de como esse RenderNode está sendo desenhado. Se ele for desenhado para um Modo de Exibição que contém, como no snippet acima, basta invalidar esse modo de exibição funciona. Se, em vez disso, o RenderNode estiver sendo desenhado diretamente para uma Tela, como com Surface#lockHardwareCanvas() um novo quadro, precisará ser desenhado chamando Surface#lockHardwareCanvas(), desenhando novamente o RenderNode raiz ou qualquer conteúdo de nível superior desejado e, por fim, chamando Surface#unlockCanvasAndPost(Canvas). </p>

Java documentação para android.graphics.RenderNode.

Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Project Open Source do Open Source e usadas de acordo com os termos descritos na Creative Commons 2.5.

Construtores

Nome Description
RenderNode(String)

Cria um novo RenderNode que pode ser usado para registrar lotes de operações de desenho e armazenar/aplicar propriedades de renderização quando desenhado.

Propriedades

Nome Description
Alpha

Retorna o nível de translucência desta lista de exibição.

AmbientShadowColor

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

Bottom

Obtém a posição inferior do RenderNode.

CameraDistance

Retorna a distância em Z da câmera para este RenderNode

Class

Retorna a classe de runtime deste Object.

(Herdado de Object)
ClipToBounds

Retorna se o RenderNode está recortado ou não aos seus limites.

ClipToOutline

Consulte #setClipToOutline(boolean)

Elevation

Consulte #setElevation(float)

Handle

O identificador para a instância subjacente do Android.

(Herdado de Object)
HasDisplayList

Retorna se o RenderNode tem uma lista de exibição.

HasIdentityMatrix

Se o RenderNode tem ou não uma transformação de identidade.

HasOverlappingRendering

Indica se o conteúdo dessa lista de exibição se sobrepõe.

HasShadow

Verifica se o RenderNode tem uma sombra.

Height

Obtém a altura do RenderNode, que é a parte inferior - superior.

IsForceDarkAllowed

Consulte #setForceDarkAllowed(boolean)

IsPivotExplicitlySet

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

JniIdentityHashCode

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

(Herdado de Object)
JniPeerMembers

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

Left

Obtém a posição esquerda para o RenderNode.

PeerReference

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

(Herdado de Object)
PivotX

Retorna o valor dinâmico dessa lista de exibição no eixo X, em pixels.

PivotY

Retorna o valor dinâmico dessa lista de exibição no eixo Y, em pixels.

Right

Obtém a posição certa para o RenderNode.

RotationX

Retorna o valor de rotação dessa lista de exibição em torno do eixo X, em graus.

RotationY

Retorna o valor de rotação dessa lista de exibição em torno do eixo Y, em graus.

RotationZ

Retorna o valor de rotação dessa lista de exibição em torno do eixo Z, em graus.

ScaleX

Retorna o valor de escala dessa lista de exibição no eixo X.

ScaleY

Retorna o valor de escala para esta lista de exibição no eixo Y.

SpotShadowColor

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

ThresholdClass

Essa API dá suporte à infraestrutura do Mono para Android e não se destina a ser usada diretamente do seu código.

(Herdado de Object)
ThresholdType

Essa API dá suporte à infraestrutura do Mono para Android e não se destina a ser usada diretamente do seu código.

(Herdado de Object)
Top

Obtém a posição superior do RenderNode.

TranslationX

Retorna o valor de tradução dessa lista de exibição no eixo X, em pixels.

TranslationY

Retorna o valor de tradução dessa lista de exibição no eixo Y, em pixels.

TranslationZ

Retorna o valor de tradução dessa lista de exibição no eixo Z.

UniqueId

Retorna a ID exclusiva que identifica esse RenderNode.

UseCompositingLayer

Obtém se uma camada de composição é forçada ou não a ser usada.

Width

Obtém a largura do RenderNode, que é a direita - esquerda.

Métodos

Nome Description
BeginRecording()

O mesmo que #beginRecording(int, int) com a largura e a altura definidas como largura e altura do RenderNode.

BeginRecording(Int32, Int32)

Inicia a gravação de uma lista de exibição para o nó de renderização.

Clone()

Cria e retorna uma cópia desse objeto.

(Herdado de Object)
ComputeApproximateMemoryUsage()

Obtém o uso aproximado da memória do RenderNode para fins de depuração.

DiscardDisplayList()

Redefinir recursos nativos.

Dispose()

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

(Herdado de Object)
Dispose(Boolean)

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

(Herdado de Object)
EndRecording()

' Encerra a gravação desta lista de exibição.

Equals(Object)

Indica se algum outro objeto é "igual a" este.

(Herdado de Object)
GetHashCode()

Retorna um valor de código hash para o objeto.

(Herdado de Object)
GetInverseMatrix(Matrix)

Obtém a transformação atual invertida.

GetMatrix(Matrix)

Obtém a matriz de transformação atual

JavaFinalize()

Chamado pelo coletor de lixo em um objeto quando a coleta de lixo determina que não há mais referências ao objeto.

(Herdado de Object)
Notify()

Ativa um único thread que está aguardando no monitor deste objeto.

(Herdado de Object)
NotifyAll()

Ativa todos os threads que estão aguardando no monitor deste objeto.

(Herdado de Object)
OffsetLeftAndRight(Int32)

Compensa as posições esquerda e direita para o RenderNode

OffsetTopAndBottom(Int32)

Compensa os valores superior e inferior para o RenderNode

ResetPivot()

Limpa qualquer pivô definido anteriormente por uma chamada para #setPivotX(float) ou #setPivotY(float).

SetAlpha(Single)

Define o nível de translucência da lista de exibição.

SetAmbientShadowColor(Color)

Define a cor da sombra ambiente desenhada quando o RenderNode tem um valor Z ou elevação positivo e é desenhado dentro de uma Canvas#enableZ() seção.

SetCameraDistance(Single)

Define a distância ao longo do eixo Z (ortogonal para o plano X/Y no qual RenderNodes são desenhados) da câmera para este RenderNode.

SetClipRect(Rect)

Define um clipe adicional no RenderNode.

SetClipToBounds(Boolean)

Defina se o nó Renderizar deve se recortar aos seus limites.

SetClipToOutline(Boolean)

Habilita ou desabilita o recorte na estrutura de tópicos.

SetElevation(Single)

Define a elevação base deste RenderNode em pixels

SetForceDarkAllowed(Boolean)

Define se a força escura deve ou não ser aplicada a este RenderNode.

SetHandle(IntPtr, JniHandleOwnership)

Define a propriedade Handle

(Herdado de Object)
SetHasOverlappingRendering(Boolean)

Define se a lista de exibição renderiza o conteúdo sobreposto.

SetOutline(Outline)

Define a estrutura de tópicos, definindo a forma que converte uma sombra e o caminho a ser recortado se setClipToOutline estiver definido.

SetPivotX(Single)

Define o valor dinâmico da lista de exibição no eixo X

SetPivotY(Single)

Define o valor dinâmico da lista de exibição no eixo Y

SetPosition(Int32, Int32, Int32, Int32)

Define a posição do RenderNode.

SetPosition(Rect)

Define a posição do RenderNode.

SetProjectBackwards(Boolean)

Define se o RenderNode deve ser desenhado imediatamente após o RenderNode ancestral mais próximo que contém um receptor de projeção.

SetProjectionReceiver(Boolean)

Define se o RenderNode é um receptor de projeção.

SetRenderEffect(RenderEffect)

Configure a android.graphics.RenderEffect aplicação a este RenderNode.

SetRotationX(Single)

Define o valor de rotação da lista de exibição em torno do eixo X.

SetRotationY(Single)

Define o valor de rotação da lista de exibição em torno do eixo Y.

SetRotationZ(Single)

Define o valor de rotação da lista de exibição em torno do eixo Z.

SetScaleX(Single)

Define o valor de escala para a lista de exibição no eixo X.

SetScaleY(Single)

Define o valor de escala para a lista de exibição no eixo Y.

SetSpotShadowColor(Color)

Define a cor da sombra spot que é desenhada quando o RenderNode tem um valor Z ou elevação positivo e é desenhado dentro de uma Canvas#enableZ() seção.

SetTranslationX(Single)

Define o valor da tradução para a lista de exibição no eixo X.

SetTranslationY(Single)

Define o valor de tradução para a lista de exibição no eixo Y.

SetTranslationZ(Single)

Define o valor de tradução para a lista de exibição no eixo Z.

SetUseCompositingLayer(Boolean, Paint)

Controla se esse RenderNode deve ou não ser forçado a renderizar em um buffer intermediário.

ToArray<T>()

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

(Herdado de Object)
ToString()

Retorna uma representação de cadeia de caracteres do objeto.

(Herdado de Object)
UnregisterFromRuntime()

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

(Herdado de Object)
Wait()

Faz com que o thread atual aguarde até ser despertado, normalmente por ser <notificado/em> ou <em>interrompido</em>.<>

(Herdado de Object)
Wait(Int64, Int32)

Faz com que o thread atual aguarde até que ele seja despertado, normalmente por ser <>notificado</em> ou <em>interrompido</em>, ou até que uma determinada quantidade de tempo real tenha decorrido.

(Herdado de Object)
Wait(Int64)

Faz com que o thread atual aguarde até que ele seja despertado, normalmente por ser <>notificado</em> ou <em>interrompido</em>, ou até que uma determinada quantidade de tempo real tenha decorrido.

(Herdado de Object)

Implantações explícitas de interface

Nome Description
IJavaPeerable.Disposed()

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

(Herdado de Object)
IJavaPeerable.DisposeUnlessReferenced()

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

(Herdado de Object)
IJavaPeerable.Finalized()

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

(Herdado de Object)
IJavaPeerable.JniManagedPeerState

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

(Herdado de Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

(Herdado de Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

(Herdado de Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

(Herdado de Object)

Métodos de Extensão

Nome Description
GetJniTypeName(IJavaPeerable)

Obtém o nome JNI do tipo da instância self.

JavaAs<TResult>(IJavaPeerable)

Tente coagir a digitar selfTResult, verificando se a coerção é válida no lado Java.

JavaCast<TResult>(IJavaObject)

Executa uma conversão de tipo marcada por runtime do Android.

JavaCast<TResult>(IJavaObject)

RenderNode é usado para criar hierarquias de renderização acelerada por hardware.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Tente coagir a digitar selfTResult, verificando se a coerção é válida no lado Java.

Aplica-se a