Condividi tramite


RenderNode Classe

Definizione

RenderNode viene usato per creare gerarchie di rendering con accelerazione 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
Ereditarietà
RenderNode
Attributi

Commenti

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware. Ogni RenderNode contiene sia un elenco di visualizzazioni che un set di proprietà che influiscono sul rendering dell'elenco di visualizzazione. I valori RenderNodes vengono usati internamente per tutte le visualizzazioni per impostazione predefinita e in genere non vengono usati direttamente.

RenderNodes viene usato per dividere il contenuto di rendering di una scena complessa in parti più piccole che possono quindi essere aggiornate singolarmente in modo più economico. L'aggiornamento di parte della scena deve solo aggiornare l'elenco di visualizzazione o le proprietà di un numero ridotto di RenderNode invece di ridisegnare tutto da zero. Un oggetto RenderNode richiede solo la registrazione dell'elenco di visualizzazione quando il relativo contenuto deve essere modificato da solo. RenderNodes può anche essere trasformato senza registrare nuovamente l'elenco di visualizzazione tramite le proprietà di trasformazione.

Un editor di testo può ad esempio archiviare ogni paragrafo nel proprio RenderNode. Pertanto, quando l'utente inserisce o rimuove caratteri, è necessario registrare di nuovo solo l'elenco di visualizzazione del paragrafo interessato.

<h3>Accelerazione< hardware/h3>

È possibile disegnare i valori RenderNodes usando un oggetto RecordingCanvas. Non sono supportati nel software. Assicurarsi sempre che l'oggetto android.graphics.Canvas usato per eseguire il rendering di un elenco di visualizzazione sia accelerato dall'hardware tramite android.graphics.Canvas#isHardwareAccelerated().

<h3>Creazione di un oggetto 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>Disegno di un oggetto RenderNode in una visualizzazione</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>Rilascio di risorse</h3>

Questo passaggio non è obbligatorio, ma consigliato se si vogliono rilasciare le risorse contenute in un elenco di visualizzazione il prima possibile. La maggior parte delle bitmap che può contenere.

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

<h3>Proprietà</h3>

Un oggetto RenderNode offre inoltre diverse proprietà, ad esempio #setScaleX(float) o #setTranslationX(float), che possono essere usate per influire su tutti i comandi di disegno registrati all'interno. Ad esempio, queste proprietà possono essere usate per spostarsi in un numero elevato di immagini senza eseguire nuovamente tutte le singole canvas.drawBitmap() chiamate.

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();
                }

Alcune delle proprietà possono apparire inizialmente ridondanti, ad esempio #setElevation(float) e #setTranslationZ(float). Il motivo di questi duplicati è consentire una separazione tra utilizzi statici & temporanei. Si consideri ad esempio un pulsante che genera da 2dp a 8dp quando viene premuto. A tale scopo, un'applicazione può decidere di impostareElevation(2dip) e quindi premere per animare setTranslationZ su 6dip. Questa combinazione consente di ottenere il valore finale di 8dip desiderato, ma l'animazione deve preoccuparsi solo di animare l'accuratezza dalla pressione senza dover conoscere il valore iniziale iniziale. #setTranslationX(float) e #setTranslationY(float) sono forniti in modo analogo per gli usi di animazione nonostante la sovrapposizione funzionale con #setPosition(Rect).

La matrice di trasformazione di RenderNode viene calcolata in fase di rendering come indicato di seguito:

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());

La matrice di trasformazione canvas corrente, che viene convertita nella posizione di RenderNode, viene quindi moltiplicata per la matrice di trasformazione di RenderNode. Pertanto, l'ordinamento dei setter di proprietà chiamanti non influisce sul risultato. Questo significa che:

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

Equivale a:

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

<h3>Threading</h3>

RenderNode può essere creato e usato in qualsiasi thread, ma non thread-safe. Solo un singolo thread può interagire con un Oggetto RenderNode in qualsiasi momento. È fondamentale che RenderNode venga usato solo nello stesso thread con cui viene disegnato. Ad esempio, quando si usa RenderNode con una visualizzazione personalizzata, è necessario usare RenderNode solo dal thread dell'interfaccia utente.

<h3>Quando eseguire nuovamente il rendering</h3>

Molti dei metodi di mutazione RenderNode, ad esempio #setTranslationX(float), restituiscono un valore booleano che indica se il valore è effettivamente cambiato o meno. Ciò è utile per rilevare se è necessario eseguire o meno il rendering di un nuovo frame. Un utilizzo tipico sarà simile al seguente:

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

Ciò è marginalmente più veloce rispetto all'esecuzione di un controllo iniziale più esplicito se il valore è stato modificato confrontando il valore #getTranslationX() desiderato rispetto a quando riduce al minimo le transizioni JNI. Il meccanismo effettivo di richiesta del rendering di un nuovo frame dipende dalla modalità di disegno di questo oggetto RenderNode. Se viene disegnato in una visualizzazione contenitore, come nel frammento di codice precedente, è sufficiente invalidare tale visualizzazione. Se invece renderNode viene disegnato direttamente in un oggetto Canvas, ad esempio con Surface#lockHardwareCanvas() , è necessario disegnare un nuovo frame chiamando Surface#lockHardwareCanvas(), disegnare di nuovo il renderNode radice o qualsiasi contenuto di primo livello desiderato e infine chiamare Surface#unlockCanvasAndPost(Canvas). </p>

Documentazione java per android.graphics.RenderNode.

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal Android e usato in base ai termini descritti in 2.5 Attribution License Creative Commons 2.5 Attribution License.

Costruttori

RenderNode(String)

Crea un nuovo oggetto RenderNode che può essere utilizzato per registrare batch di operazioni di disegno e archiviare/applicare le proprietà di rendering quando viene disegnato.

Proprietà

Alpha

Restituisce il livello di traslucenza di questo elenco di visualizzazione.

AmbientShadowColor

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

Bottom

Ottiene la posizione inferiore per RenderNode.

CameraDistance

Restituisce la distanza in Z della fotocamera per questo RenderNode

Class

Restituisce la classe di runtime di questo Objectoggetto .

(Ereditato da Object)
ClipToBounds

Restituisce un valore che indica se RenderNode sta ritagliando i limiti.

ClipToOutline

Vedere #setClipToOutline(boolean)

Elevation

Vedere #setElevation(float)

Handle

Handle per l'istanza di Android sottostante.

(Ereditato da Object)
HasDisplayList

Restituisce un valore che indica se RenderNode dispone di un elenco di visualizzazione.

HasIdentityMatrix

Indica se RenderNode ha o meno una trasformazione di identità.

HasOverlappingRendering

Indica se il contenuto di questo elenco di visualizzazione si sovrappone.

HasShadow

Controlla se RenderNode ha un'ombreggiatura.

Height

Ottiene l'altezza di RenderNode, ovvero la parte inferiore in alto.

IsForceDarkAllowed

Vedere #setForceDarkAllowed(boolean)

IsPivotExplicitlySet

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

JniIdentityHashCode

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

(Ereditato da Object)
JniPeerMembers

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

Left

Ottiene la posizione sinistra per RenderNode.

PeerReference

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

(Ereditato da Object)
PivotX

Restituisce il valore pivot per questo elenco di visualizzazione sull'asse X, espresso in pixel.

PivotY

Restituisce il valore pivot per questo elenco di visualizzazione sull'asse Y, in pixel.

Right

Ottiene la posizione corretta per RenderNode.

RotationX

Restituisce il valore di rotazione per questo elenco di visualizzazione intorno all'asse X, espresso in gradi.

RotationY

Restituisce il valore di rotazione per questo elenco di visualizzazione intorno all'asse Y, espresso in gradi.

RotationZ

Restituisce il valore di rotazione per questo elenco di visualizzazione intorno all'asse Z, espresso in gradi.

ScaleX

Restituisce il valore di scala per questo elenco di visualizzazione sull'asse X.

ScaleY

Restituisce il valore di scala per questo elenco di visualizzazione sull'asse Y.

SpotShadowColor

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

ThresholdClass

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

(Ereditato da Object)
ThresholdType

Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice.

(Ereditato da Object)
Top

Ottiene la posizione superiore per RenderNode.

TranslationX

Restituisce il valore di conversione per questo elenco di visualizzazione sull'asse X, espresso in pixel.

TranslationY

Restituisce il valore di conversione per questo elenco di visualizzazione sull'asse Y, in pixel.

TranslationZ

Restituisce il valore di traslazione per questo elenco di visualizzazione sull'asse Z.

UniqueId

Restituisce l'ID univoco che identifica il nodo RenderNode.

UseCompositingLayer

Ottiene un valore che indica se è necessario utilizzare o meno un livello di composizione.

Width

Ottiene la larghezza di RenderNode, ovvero a destra a sinistra.

Metodi

BeginRecording()

#beginRecording(int, int) Uguale alla larghezza & altezza impostata sulla larghezza del nodo RenderNode &'altezza.

BeginRecording(Int32, Int32)

Avvia la registrazione di un elenco di visualizzazione per il nodo di rendering.

Clone()

Crea e restituisce una copia di questo oggetto.

(Ereditato da Object)
ComputeApproximateMemoryUsage()

Ottiene l'utilizzo approssimativo della memoria di RenderNode a scopo di debug.

DiscardDisplayList()

Reimpostare le risorse native.

Dispose()

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

(Ereditato da Object)
Dispose(Boolean)

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

(Ereditato da Object)
EndRecording()

' Termina la registrazione per questo elenco di visualizzazione.

Equals(Object)

Indica se un altro oggetto è "uguale a" questo.

(Ereditato da Object)
GetHashCode()

Restituisce un valore del codice hash per l'oggetto.

(Ereditato da Object)
GetInverseMatrix(Matrix)

Ottiene la trasformazione corrente invertita.

GetMatrix(Matrix)

Ottiene la matrice di trasformazione corrente

JavaFinalize()

Chiamato dal Garbage Collector su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto .

(Ereditato da Object)
Notify()

Riattiva un singolo thread in attesa del monitor dell'oggetto.

(Ereditato da Object)
NotifyAll()

Riattiva tutti i thread in attesa del monitoraggio di questo oggetto.

(Ereditato da Object)
OffsetLeftAndRight(Int32)

Sfalsa le posizioni a sinistra e a destra per RenderNode

OffsetTopAndBottom(Int32)

Esegue l'offset dei valori superiore e inferiore per RenderNode

ResetPivot()

Cancella qualsiasi pivot impostato in precedenza da una chiamata a #setPivotX(float) o #setPivotY(float).

SetAlpha(Single)

Imposta il livello di traslucenza per l'elenco di visualizzazione.

SetAmbientShadowColor(Color)

Imposta il colore dell'ombreggiatura ambientale disegnata quando RenderNode ha un valore Z positivo o di elevazione e viene disegnato all'interno di una Canvas#enableZ() sezione.

SetCameraDistance(Single)

Imposta la distanza lungo l'asse Z (ortogonale sul piano X/Y su cui vengono disegnati RenderNodes) dalla fotocamera a questo RenderNode.

SetClipRect(Rect)

Imposta un clip aggiuntivo sul nodo RenderNode.

SetClipToBounds(Boolean)

Impostare se il nodo Render deve ritagliarsi sui limiti.

SetClipToOutline(Boolean)

Abilita o disabilita il ritaglio nella struttura.

SetElevation(Single)

Imposta l'elevazione di base di questo oggetto RenderNode in pixel

SetForceDarkAllowed(Boolean)

Imposta un valore che indica se consentire o meno l'applicazione di forza scura al nodo RenderNode.

SetHandle(IntPtr, JniHandleOwnership)

Imposta la proprietà Handle.

(Ereditato da Object)
SetHasOverlappingRendering(Boolean)

Imposta un valore che indica se l'elenco di visualizzazione esegue il rendering del contenuto che si sovrappone.

SetOutline(Outline)

Imposta la struttura, definendo la forma che esegue il cast di un'ombreggiatura e il percorso da ritagliare se è impostato setClipToOutline.

SetPivotX(Single)

Imposta il valore pivot per l'elenco di visualizzazione sull'asse X

SetPivotY(Single)

Imposta il valore pivot per l'elenco di visualizzazione sull'asse Y

SetPosition(Int32, Int32, Int32, Int32)

Imposta la posizione di RenderNode.

SetPosition(Rect)

Imposta la posizione di RenderNode.

SetProjectBackwards(Boolean)

Imposta un valore che indica se Il nodo RenderNode deve essere disegnato immediatamente dopo il predecessore più vicino RenderNode contenente un ricevitore di proiezione.

SetProjectionReceiver(Boolean)

Imposta un valore che indica se RenderNode è un ricevitore di proiezione.

SetRenderEffect(RenderEffect)

Configurare l'oggetto android.graphics.RenderEffect da applicare a questo RenderNode.

SetRotationX(Single)

Imposta il valore di rotazione per l'elenco di visualizzazione attorno all'asse X.

SetRotationY(Single)

Imposta il valore di rotazione per l'elenco di visualizzazione intorno all'asse Y.

SetRotationZ(Single)

Imposta il valore di rotazione per l'elenco di visualizzazione attorno all'asse Z.

SetScaleX(Single)

Imposta il valore di scala per l'elenco di visualizzazione sull'asse X.

SetScaleY(Single)

Imposta il valore di scala per l'elenco di visualizzazione sull'asse Y.

SetSpotShadowColor(Color)

Imposta il colore dell'ombreggiatura spot disegnata quando RenderNode ha un valore Z positivo o di elevazione e viene disegnato all'interno di una Canvas#enableZ() sezione.

SetTranslationX(Single)

Imposta il valore di traslazione per l'elenco di visualizzazione sull'asse X.

SetTranslationY(Single)

Imposta il valore di conversione per l'elenco di visualizzazione sull'asse Y.

SetTranslationZ(Single)

Imposta il valore di traslazione per l'elenco di visualizzazione sull'asse Z.

SetUseCompositingLayer(Boolean, Paint)

Controlla se forzare o meno il rendering di RenderNode in un buffer intermedio.

ToArray<T>()

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

(Ereditato da Object)
ToString()

Restituisce una rappresentazione in formato stringa dell'oggetto.

(Ereditato da Object)
UnregisterFromRuntime()

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

(Ereditato da Object)
Wait()

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere eseguendo <una>notifica</em> o <em>interrotto</em>.

(Ereditato da Object)
Wait(Int64)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere eseguendo <una notifica</>em> o <em>interrotto</em> o fino a quando non è trascorsa una certa quantità di tempo reale.

(Ereditato da Object)
Wait(Int64, Int32)

Fa sì che il thread corrente attenda finché non viene risvegliato, in genere eseguendo <una notifica</>em> o <em>interrotto</em> o fino a quando non è trascorsa una certa quantità di tempo reale.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

IJavaPeerable.Disposed()

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

(Ereditato da Object)
IJavaPeerable.DisposeUnlessReferenced()

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

(Ereditato da Object)
IJavaPeerable.Finalized()

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

(Ereditato da Object)
IJavaPeerable.JniManagedPeerState

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

(Ereditato da Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

(Ereditato da Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

(Ereditato da Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

(Ereditato da Object)

Metodi di estensione

JavaCast<TResult>(IJavaObject)

Esegue una conversione del tipo verificato dal runtime Android.

JavaCast<TResult>(IJavaObject)

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

GetJniTypeName(IJavaPeerable)

RenderNode viene usato per creare gerarchie di rendering con accelerazione hardware.

Si applica a