RenderNode Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
- 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 Rendern der Anzeigeliste auswirken. RenderNodes werden standardmäßig für alle Ansichten intern verwendet und werden normalerweise 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. Das Aktualisieren eines Teils der Szene muss nur die Anzeigeliste oder -eigenschaften einer kleinen Anzahl von RenderNode aktualisieren, anstatt alles neu zu erstellen. Ein RenderNode benötigt nur die neu aufgezeichnete Anzeigeliste, wenn der Inhalt allein geändert werden soll. RenderNodes können auch transformiert werden, ohne die Anzeigeliste über die Transformationseigenschaften erneut aufzuzeichnen.
Ein Text-Editor kann beispielsweise 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 einer RecordingCanvas. Sie werden in Software nicht unterstützt. Stellen Sie immer sicher, dass die android.graphics.Canvas Zum Rendern einer Anzeigeliste verwendete Hardware mithilfe von android.graphics.Canvas#isHardwareAccelerated()Hardware beschleunigt wird.
<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 RenderNodes 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 freigeben möchten, die von einer Anzeigeliste so schnell wie möglich gehalten werden. Die wichtigsten Bitmaps, die sie enthalten 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 Zeichnungsbefehle zu beeinflussen, die in diesem Bereich aufgezeichnet werden. Beispielsweise können diese Eigenschaften verwendet werden, um eine große Anzahl von Bildern zu navigieren, ohne alle einzelnen canvas.drawBitmap() Aufrufe erneut auszustellen.
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 besteht darin, eine Trennung zwischen statischen und vorübergehenden Verwendungen zu ermöglichen. Betrachten Sie beispielsweise eine Schaltfläche, die beim Drücken von 2DP auf 8DP anhebt. Um dies zu erreichen, kann eine Anwendung entscheiden, dieElevation(2dip) festzulegen, und dann auf drücken, um setTranslationZ auf 6dip zu animieren. Kombiniert erreicht dies den endgültig gewünschten 8dip-Wert, aber die Animation muss sich nur mit dem Animieren des Lifts von der Presse befassen, ohne den anfänglichen Startwert kennen zu müssen.
#setTranslationX(float) und #setTranslationY(float) werden ähnlich für die Verwendung von Animationen bereitgestellt, obwohl die funktionale Überlappung mit #setPosition(Rect).
Die RenderNode-Transformationsmatrix 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 Canvastransformationsmatrix, die in die Position von RenderNode übersetzt wird, wird dann mit der Transformationsmatrix von RenderNode multipliziert. Daher wirkt sich die Sortierung von Aufrufen von Eigenschaftensatzern nicht auf das Ergebnis aus. Das heißt:
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, sind aber nicht threadsicher. Nur ein einzelner Thread kann jederzeit mit einem RenderNode interagieren. Es ist wichtig, dass renderNode nur für denselben Thread verwendet wird, mit dem er gezeichnet wird. Wenn Sie z. B. RenderNode mit einer benutzerdefinierten Ansicht verwenden, darf 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 der Wert tatsächlich geändert wurde oder nicht. Dies ist nützlich, um zu erkennen, ob ein neuer Frame gerendert werden soll oder nicht. Eine typische Verwendung würde wie folgt aussehen:
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 Vorabüberprüfung, wenn sich der Wert geändert hat, indem der gewünschte Wert #getTranslationX() verglichen wird, da er JNI-Übergänge minimiert. Der tatsächliche Mechanismus zum Anfordern eines neuen Frames zum Rendern hängt davon ab, wie dieser RenderNode gezeichnet wird. Wenn es wie im obigen Codeausschnitt auf eine enthaltende Ansicht gezeichnet wird, funktioniert dies einfach. Wenn stattdessen der RenderNode direkt auf einen Canvas gezeichnet wird, z. B. mit Surface#lockHardwareCanvas() dem Aufruf eines neuen Frames, das erneute Zeichnen des RenderNode-Stamminhalts oder des gewünschten Inhalts der obersten Ebene und schließlich das Aufrufen eines Surface#unlockCanvasAndPost(Canvas)neuen FramesSurface#lockHardwareCanvas().
</p>
Java Dokumentation für android.graphics.RenderNode.
Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die von der Android Open Source Project erstellt und gemeinsam verwendet und gemäß den in der 2.5 Attribution License beschriebenen Begriffen verwendet werden.
Konstruktoren
| Name | Beschreibung |
|---|---|
| RenderNode(String) |
Erstellt einen neuen RenderNode, der zum Aufzeichnen von Batches von Zeichnungsvorgängen verwendet werden kann, und speichert/wendet Rendereigenschaften beim Zeichnen an. |
Eigenschaften
| Name | Beschreibung |
|---|---|
| Alpha |
Gibt die Transparenzebene dieser Anzeigeliste zurück. |
| AmbientShadowColor |
RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen. |
| Bottom |
Ruft die untere Position für renderNode ab. |
| CameraDistance |
Gibt den Abstand in Z der Kamera für diesen RenderNode zurück. |
| Class |
Gibt die Laufzeitklasse dieses Werts |
| ClipToBounds |
Gibt zurück, ob renderNode an die Grenzen schneidet oder nicht. |
| ClipToOutline |
Siehe |
| Elevation |
Siehe |
| Handle |
Das Handle für die zugrunde liegende Android-Instanz. (Geerbt von Object) |
| HasDisplayList |
Gibt zurück, ob renderNode über eine Anzeigeliste verfügt. |
| HasIdentityMatrix |
Gibt an, ob der RenderNode über eine Identitätstransformation verfügt. |
| HasOverlappingRendering |
Gibt an, ob sich der Inhalt dieser Anzeigeliste überlappt. |
| HasShadow |
Überprüft, ob der RenderNode einen Schatten aufweist. |
| Height |
Ruft die Höhe des RenderNode ab, die unten - oben. |
| IsForceDarkAllowed |
Siehe |
| 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 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 Drehungswert für diese Anzeigeliste um die X-Achse in Grad zurück. |
| RotationY |
Gibt den Drehungswert für diese Anzeigeliste um die Y-Achse in Grad zurück. |
| RotationZ |
Gibt den Drehungswert 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 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 Compositingschicht verwendet werden muss. |
| Width |
Ruft die Breite des RenderNode ab, die rechts - links ist. |
Methoden
| Name | Beschreibung |
|---|---|
| BeginRecording() |
Identisch mit |
| BeginRecording(Int32, Int32) |
Startet die 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 Speicherauslastung des RenderNode für Debugzwecke ab. |
| DiscardDisplayList() |
Setzen Sie systemeigene Ressourcen zurück. |
| 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 "gleich" diesem Objekt 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 bestimmt, dass keine weiteren Verweise 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 linken und rechten Positionen für renderNode |
| OffsetTopAndBottom(Int32) |
Versetzt die obersten und untersten Werte für renderNode |
| ResetPivot() |
Löscht alle Pivots, die zuvor durch einen Aufruf |
| SetAlpha(Single) |
Legt die Transparenzebene 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 |
| 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 für renderNode fest. |
| SetClipToBounds(Boolean) |
Legen Sie fest, ob sich der Renderknoten selbst an seine Grenzen ausschneiden soll. |
| SetClipToOutline(Boolean) |
Aktiviert oder deaktiviert den Clipping an die Gliederung. |
| SetElevation(Single) |
Legt die Basiserweiterung dieses RenderNodes in Pixeln fest. |
| SetForceDarkAllowed(Boolean) |
Legt fest, ob erzwungen werden soll, dass dunkel auf diesen RenderNode angewendet wird. |
| 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 Kontur fest, definiert die Form, die einen Schatten umgibt, 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 renderNode unmittelbar nach dem nächstgelegenen Vorgänger renderNode gezeichnet werden soll, der einen Projektionsempfänger enthält. |
| SetProjectionReceiver(Boolean) |
Legt fest, ob renderNode ein Projektionsempfänger ist. |
| SetRenderEffect(RenderEffect) |
Konfigurieren Sie die |
| SetRotationX(Single) |
Legt den Drehungswert für die Anzeigeliste um die X-Achse fest. |
| SetRotationY(Single) |
Legt den Drehungswert für die Anzeigeliste um die Y-Achse fest. |
| SetRotationZ(Single) |
Legt den Drehungswert 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 |
| 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 dieses RenderNode-Objekt in einem Zwischenpuffer gerendert werden soll. |
| 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 wach ist, in der Regel durch em benachrichtigt/em> oder <em>unterbrochen</em>.<>< (Geerbt von Object) |
| Wait(Int64, Int32) |
Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist. (Geerbt von Object) |
| Wait(Int64) |
Bewirkt, dass der aktuelle Thread wartet, bis er wach ist, in der Regel durch <em>benachrichtigt</em> oder <em>unterbrochen</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist. (Geerbt von Object) |
Explizite Schnittstellenimplementierungen
| Name | Beschreibung |
|---|---|
| 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
| Name | Beschreibung |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Ruft den JNI-Namen des Typs der Instanz |
| JavaAs<TResult>(IJavaPeerable) |
Versuchen Sie, die Eingabe |
| JavaCast<TResult>(IJavaObject) |
Führt eine android-laufzeitgecheckte Typkonvertierung aus. |
| JavaCast<TResult>(IJavaObject) |
RenderNode wird verwendet, um hardwarebeschleunigte Renderinghierarchien zu erstellen. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Versuchen Sie, die Eingabe |