RenderNode Klasse

Definition

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

[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
Vererbung
RenderNode
Attribute

Hinweise

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen. Jeder RenderNode enthält sowohl eine Anzeigeliste als auch eine Reihe von Eigenschaften, die sich auf das Rendering der Anzeigeliste auswirken. RenderNodes werden standardmäßig intern für alle Ansichten verwendet und in der Regel nicht direkt verwendet.

RenderNodes werden verwendet, um den Renderinginhalt einer komplexen Szene in kleinere Teile aufzuteilen, die dann einzeln günstiger aktualisiert werden können. Beim Aktualisieren eines Teils der Szene muss nur die Anzeigeliste oder die Eigenschaften einer kleinen Anzahl von RenderNode aktualisiert werden, anstatt alles von Grund auf neu zu erstellen. Ein RenderNode muss die Anzeigeliste nur dann erneut aufgezeichnet werden, wenn der Inhalt allein geändert werden soll. RenderNodes kann auch transformiert werden, ohne die Anzeigeliste über die Transformationseigenschaften erneut aufzuzeichnen.

Ein Text-Editor kann für instance jeden Absatz in einem eigenen RenderNode speichern. Wenn der Benutzer Also Zeichen einfügt oder entfernt, muss nur die Anzeigeliste des betroffenen Absatzes erneut aufgezeichnet werden.

<h3>Hardwarebeschleunigung</h3>

RenderNodes können mit einem RecordingCanvasgezeichnet werden. Sie werden in der Software nicht unterstützt. Stellen Sie immer sicher, dass die, die android.graphics.Canvas Sie zum Rendern einer Anzeigeliste verwenden, mit android.graphics.Canvas#isHardwareAccelerated()hardwarebeschleunigt ist.

<h3>Erstellen eines 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>Zeichnen eines RenderKnotens in einer Ansicht</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>Freigeben von Ressourcen</h3>

Dieser Schritt ist nicht obligatorisch, wird jedoch empfohlen, wenn Sie Ressourcen, die in einer Anzeigeliste gespeichert sind, so schnell wie möglich freigeben möchten. Am wichtigsten sind alle Bitmaps, die darin enthalten sein können.

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

<h3>Eigenschaften</h3>

Darüber hinaus bietet ein RenderNode mehrere Eigenschaften, z #setScaleX(float) . B. oder #setTranslationX(float), die verwendet werden können, um alle darin aufgezeichneten Zeichnungsbefehle zu beeinflussen. Für instance können diese Eigenschaften verwendet werden, um eine große Anzahl von Bildern zu verschieben, ohne alle einzelnen canvas.drawBitmap() Aufrufe erneut auszugeben.

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

Einige der Eigenschaften können zunächst redundant erscheinen, z #setElevation(float) . B. und #setTranslationZ(float). Der Grund für diese Duplikate ist eine Trennung zwischen statischen & vorübergehenden Verwendungen. Betrachten Sie beispielsweise eine Schaltfläche, die beim Drücken von 2dp auf 8DP anhebt. Um zu erreichen, dass eine Anwendung sich dazu entscheidet, Elevation(2dip) festzulegen, und drücken Sie dann, um setTranslationZ auf 6dip zu animieren. In Kombination erreicht dies den endgültigen gewünschten 8dip-Wert, aber die Animation muss sich nur um die Animierung des Aufzugs vom Drücken kümmern, ohne den anfänglichen Startwert kennen zu müssen. #setTranslationX(float) und #setTranslationY(float) werden auch für Animationsverwendungen bereitgestellt, trotz der funktionsübergreifenden Überlappung mit #setPosition(Rect).

Die Transformationsmatrix des RenderNodes wird zur Renderzeit wie folgt berechnet:

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

Die aktuelle Canvas-Transformationsmatrix, die in die Position des RenderNodes übersetzt wird, wird dann mit der Transformationsmatrix des RenderNode multipliziert. Daher wirkt sich die Reihenfolge der aufrufenden Eigenschaftensetter nicht auf das Ergebnis aus. Das heißt, dass:

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

entspricht:

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

<h3>Threading</h3>

RenderNode kann für jeden Thread erstellt und verwendet werden, ist aber nicht threadsicher. Nur ein einzelner Thread kann zu einem bestimmten Zeitpunkt mit einem RenderNode interagieren. Es ist wichtig, dass der RenderNode nur für denselben Thread verwendet wird, mit dem er gezeichnet wird. Wenn Sie beispielsweise RenderNode mit einer benutzerdefinierten Ansicht verwenden, darf dieser RenderNode nur aus dem UI-Thread verwendet werden.

<h3>Wann wird erneut gerendert</h3>

Viele der RenderNode-Mutationsmethoden, z #setTranslationX(float). B. , geben einen booleschen Wert zurück, der angibt, ob sich der Wert tatsächlich geändert hat oder nicht. Dies ist nützlich, um zu erkennen, ob ein neuer Frame gerendert werden soll oder nicht. Eine typische Verwendung sieht wie folgt aus:

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

Dies ist geringfügig schneller als eine explizitere Vorabprüfung, wenn der Wert durch Vergleich des gewünschten Werts mit #getTranslationX() geändert wird, da JNI-Übergänge minimiert werden. Der tatsächliche Mechanismus zum Anfordern eines neuen Frames zum Rendern hängt davon ab, wie dieser RenderNode gezeichnet wird. Wenn sie wie im obigen Codeausschnitt auf eine enthaltende Ansicht gezeichnet wird, wird einfach ungültig, dass Die Ansicht funktioniert. Wenn stattdessen der RenderNode direkt in eine Canvas gezeichnet wird, z. B. mit Surface#lockHardwareCanvas() , muss ein neuer Frame gezeichnet werden, indem der Surface#lockHardwareCanvas()RenderNode-Stamm oder der gewünschte Inhalt der obersten Ebene erneut gezeichnet und schließlich aufgerufen Surface#unlockCanvasAndPost(Canvas)wird. </p>

Java-Dokumentation für android.graphics.RenderNode.

Teile dieser Seite sind Änderungen, die auf Arbeiten basieren, die vom Android Open Source Project erstellt und freigegeben wurden und gemäß den In der Attribution License beschriebenen Begriffen verwendet werden.

Konstruktoren

RenderNode(String)

Erstellt einen neuen RenderNode, der verwendet werden kann, um Batches von Zeichnungsvorgängen aufzuzeichnen und Rendereigenschaften beim Zeichnen zu speichern bzw. anzuwenden.

Eigenschaften

Alpha

Gibt die Transluzenzstufe dieser Anzeigeliste zurück.

AmbientShadowColor

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

Bottom

Ruft die untere Position für den RenderNode ab.

CameraDistance

Gibt den Abstand in Z der Kamera für diesen RenderNode zurück.

Class

Gibt die Laufzeitklasse dieses Objectzurück.

(Geerbt von Object)
ClipToBounds

Gibt zurück, ob der RenderNode an seine Grenzen geschnitten wird oder nicht.

ClipToOutline

Siehe #setClipToOutline(boolean).

Elevation

Siehe #setElevation(float).

Handle

Das Handle zum zugrunde liegenden Android-instance.

(Geerbt von Object)
HasDisplayList

Gibt zurück, ob der RenderNode über eine Anzeigeliste verfügt.

HasIdentityMatrix

Gibt an, ob der RenderNode über eine Identitätstransformation verfügt oder nicht.

HasOverlappingRendering

Gibt an, ob sich der Inhalt dieser Anzeigeliste überschneidet.

HasShadow

Überprüft, ob der RenderNode einen Schatten aufweist.

Height

Ruft die Höhe des RenderNodes ab, wobei es sich um die untere - obere Ebene handelt.

IsForceDarkAllowed

Siehe #setForceDarkAllowed(boolean).

IsPivotExplicitlySet

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

JniIdentityHashCode

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

(Geerbt von Object)
JniPeerMembers

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

Left

Ruft die linke Position für den RenderNode ab.

PeerReference

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

(Geerbt von Object)
PivotX

Gibt den Pivotwert für diese Anzeigeliste auf der X-Achse in Pixel zurück.

PivotY

Gibt den Pivotwert für diese Anzeigeliste auf der Y-Achse in Pixel zurück.

Right

Ruft die richtige Position für den RenderNode ab.

RotationX

Gibt den Drehwert für diese Anzeigeliste um die X-Achse in Grad zurück.

RotationY

Gibt den Drehwert für diese Anzeigeliste um die Y-Achse in Grad zurück.

RotationZ

Gibt den Drehwert für diese Anzeigeliste um die Z-Achse in Grad zurück.

ScaleX

Gibt den Skalierungswert für diese Anzeigeliste auf der X-Achse zurück.

ScaleY

Gibt den Skalierungswert für diese Anzeigeliste auf der Y-Achse zurück.

SpotShadowColor

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

ThresholdClass

Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

(Geerbt von Object)
ThresholdType

Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen.

(Geerbt von Object)
Top

Ruft die oberste Position für den RenderNode ab.

TranslationX

Gibt den Übersetzungswert für diese Anzeigeliste auf der X-Achse in Pixel zurück.

TranslationY

Gibt den Übersetzungswert für diese Anzeigeliste auf der Y-Achse in Pixel zurück.

TranslationZ

Gibt den Übersetzungswert für diese Anzeigeliste auf der Z-Achse zurück.

UniqueId

Gibt die eindeutige ID zurück, die diesen RenderNode identifiziert.

UseCompositingLayer

Ruft ab, ob eine Kompositingebene zur Verwendung gezwungen wird oder nicht.

Width

Ruft die Breite des RenderNodes ab, der rechts – links ist.

Methoden

BeginRecording()

Identisch mit #beginRecording(int, int) der Breite & Höhe, die auf die eigene Breite des RenderNodes & Höhe festgelegt ist.

BeginRecording(Int32, Int32)

Beginnt mit der Aufzeichnung einer Anzeigeliste für den Renderknoten.

Clone()

Erstellt und gibt eine Kopie dieses Objekts zurück.

(Geerbt von Object)
ComputeApproximateMemoryUsage()

Ruft die ungefähre Arbeitsspeichernutzung des RenderNodes für Debugzwecke ab.

DiscardDisplayList()

Zurücksetzen nativer Ressourcen.

Dispose()

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

(Geerbt von Object)
Dispose(Boolean)

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

(Geerbt von Object)
EndRecording()

' Beendet die Aufzeichnung für diese Anzeigeliste.

Equals(Object)

Gibt an, ob ein anderes Objekt diesem "gleich" ist.

(Geerbt von Object)
GetHashCode()

Gibt einen Hashcodewert für das Objekt zurück.

(Geerbt von Object)
GetInverseMatrix(Matrix)

Ruft die aktuelle transformation invertiert ab.

GetMatrix(Matrix)

Ruft die aktuelle Transformationsmatrix ab.

JavaFinalize()

Wird vom Garbage Collector für ein Objekt aufgerufen, wenn die Garbage Collection feststellt, dass keine Verweise mehr auf das Objekt vorhanden sind.

(Geerbt von Object)
Notify()

Aktiviert einen einzelnen Thread, der auf dem Monitor dieses Objekts wartet.

(Geerbt von Object)
NotifyAll()

Aktiviert alle Threads, die auf dem Monitor dieses Objekts warten.

(Geerbt von Object)
OffsetLeftAndRight(Int32)

Versetzt die linke und rechte Position für den RenderNode

OffsetTopAndBottom(Int32)

Versetzt die oberen und unteren Werte für den RenderNode

ResetPivot()

Löscht alle Pivots, die zuvor durch einen Aufruf von #setPivotX(float) oder #setPivotY(float)festgelegt wurden.

SetAlpha(Single)

Legt die Transluzenzstufe für die Anzeigeliste fest.

SetAmbientShadowColor(Color)

Legt die Farbe des Umgebungsschatten fest, der gezeichnet wird, wenn der RenderNode einen positiven Z- oder Höhenwert aufweist und innerhalb eines Canvas#enableZ() Abschnitts gezeichnet wird.

SetCameraDistance(Single)

Legt den Abstand entlang der Z-Achse (orthogonal zur X/Y-Ebene, auf der RenderNodes gezeichnet werden) von der Kamera zu diesem RenderNode fest.

SetClipRect(Rect)

Legt einen zusätzlichen Clip auf dem RenderNode fest.

SetClipToBounds(Boolean)

Legen Sie fest, ob sich der Renderknoten an seine Grenzen klammern soll.

SetClipToOutline(Boolean)

Aktiviert oder deaktiviert das Ausschneiden an der Gliederung.

SetElevation(Single)

Legt die Basishöhe dieses RenderNodes in Pixel fest.

SetForceDarkAllowed(Boolean)

Legt fest, ob Die Dunkelkraft auf diesen RenderNode angewendet werden soll oder nicht.

SetHandle(IntPtr, JniHandleOwnership)

Legt die Handle-Eigenschaft fest.

(Geerbt von Object)
SetHasOverlappingRendering(Boolean)

Legt fest, ob die Anzeigeliste Inhalte rendert, die sich überlappen.

SetOutline(Outline)

Legt die Gliederung fest, definiert die Form, die einen Schatten wirft, und den Pfad, der abgeschnitten werden soll, wenn setClipToOutline festgelegt ist.

SetPivotX(Single)

Legt den Pivotwert für die Anzeigeliste auf der X-Achse fest.

SetPivotY(Single)

Legt den Pivotwert für die Anzeigeliste auf der Y-Achse fest.

SetPosition(Int32, Int32, Int32, Int32)

Legt die Position des RenderNode fest.

SetPosition(Rect)

Legt die Position des RenderNode fest.

SetProjectBackwards(Boolean)

Legt fest, ob der RenderNode unmittelbar nach dem nächstgelegenen Vorgänger RenderNode mit einem Projektionsempfänger gezeichnet werden soll.

SetProjectionReceiver(Boolean)

Legt fest, ob der RenderNode ein Projektionsempfänger ist.

SetRenderEffect(RenderEffect)

Konfigurieren Sie den android.graphics.RenderEffect , um auf diesen RenderNode anzuwenden.

SetRotationX(Single)

Legt den Drehwert für die Anzeigeliste um die X-Achse fest.

SetRotationY(Single)

Legt den Drehwert für die Anzeigeliste um die Y-Achse fest.

SetRotationZ(Single)

Legt den Drehwert für die Anzeigeliste um die Z-Achse fest.

SetScaleX(Single)

Legt den Skalierungswert für die Anzeigeliste auf der X-Achse fest.

SetScaleY(Single)

Legt den Skalierungswert für die Anzeigeliste auf der Y-Achse fest.

SetSpotShadowColor(Color)

Legt die Farbe des Spotschatten fest, der gezeichnet wird, wenn der RenderNode einen positiven Z- oder Höhenwert aufweist und innerhalb eines Canvas#enableZ() Abschnitts gezeichnet wird.

SetTranslationX(Single)

Legt den Übersetzungswert für die Anzeigeliste auf der X-Achse fest.

SetTranslationY(Single)

Legt den Übersetzungswert für die Anzeigeliste auf der Y-Achse fest.

SetTranslationZ(Single)

Legt den Übersetzungswert für die Anzeigeliste auf der Z-Achse fest.

SetUseCompositingLayer(Boolean, Paint)

Steuert, ob dieser RenderNode in einem Zwischenpuffer gerendert werden soll oder nicht.

ToArray<T>()

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolgendarstellung des Objekts zurück.

(Geerbt von Object)
UnregisterFromRuntime()

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

(Geerbt von Object)
Wait()

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel durch em benachrichtigen/em> oder <em>interrupted</em>.<><

(Geerbt von Object)
Wait(Int64)

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel, indem <er>benachrichtigt</em> oder <em>interrupted</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)
Wait(Int64, Int32)

Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel, indem <er>benachrichtigt</em> oder <em>interrupted</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

IJavaPeerable.Disposed()

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

(Geerbt von Object)
IJavaPeerable.DisposeUnlessReferenced()

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

(Geerbt von Object)
IJavaPeerable.Finalized()

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

(Geerbt von Object)
IJavaPeerable.JniManagedPeerState

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

(Geerbt von Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

(Geerbt von Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

(Geerbt von Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

(Geerbt von Object)

Erweiterungsmethoden

JavaCast<TResult>(IJavaObject)

Führt eine Für Android-Runtime überprüfte Typkonvertierung aus.

JavaCast<TResult>(IJavaObject)

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

GetJniTypeName(IJavaPeerable)

RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen.

Gilt für: