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 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 RecordingCanvas
gezeichnet 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 |
ClipToBounds |
Gibt zurück, ob der RenderNode an seine Grenzen geschnitten wird oder nicht. |
ClipToOutline |
Siehe |
Elevation |
Siehe |
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 |
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(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 |
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 |
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 |
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 |
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. |