RenderNode Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
- 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 |
| ClipToBounds |
Retorna se o RenderNode está recortado ou não aos seus limites. |
| ClipToOutline |
Consulte |
| Elevation |
Consulte |
| 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 |
| 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(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 |
| 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 |
| 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 |
| 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 |
| 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 |
| JavaAs<TResult>(IJavaPeerable) |
Tente coagir a digitar |
| 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 |