RenderNode Classe

Définition

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

[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
Héritage
RenderNode
Attributs

Remarques

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement. Chaque RenderNode contient à la fois une liste d’affichage ainsi qu’un ensemble de propriétés qui affectent le rendu de la liste d’affichage. Les renderNodes sont utilisés en interne pour toutes les vues par défaut et ne sont généralement pas utilisés directement.

Les renderNodes sont utilisés pour diviser le contenu de rendu d’une scène complexe en morceaux plus petits qui peuvent ensuite être mis à jour individuellement plus bas. La mise à jour d’une partie de la scène doit uniquement mettre à jour la liste d’affichage ou les propriétés d’un petit nombre de RenderNode au lieu de redessiner tout à partir de zéro. Un RenderNode a uniquement besoin de sa liste d’affichage réenregistré lorsque son contenu seul doit être modifié. RenderNodes peut également être transformé sans réinscrire la liste d’affichage via les propriétés de transformation.

Un éditeur de texte peut, par exemple, stocker chaque paragraphe dans son propre RenderNode. Ainsi, lorsque l’utilisateur insère ou supprime des caractères, seule la liste d’affichage du paragraphe concerné doit être enregistrée à nouveau.

<accélération matérielle< h3>/h3>

RenderNodes peut être dessiné à l’aide d’un RecordingCanvas. Ils ne sont pas pris en charge dans les logiciels. Veillez toujours à ce que le android.graphics.Canvas rendu d’une liste d’affichage soit accéléré par le matériel à l’aide android.graphics.Canvas#isHardwareAccelerated()de .

<h3>Création d’un 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>Dessin d’un RenderNode dans une vue</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>Publication de ressources</h3>

Cette étape n’est pas obligatoire, mais recommandée si vous souhaitez libérer les ressources détenues par une liste d’affichage dès que possible. La plupart des bitmaps qu’il peut contenir.

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

<Propriétés< h3>/h3>

En outre, un RenderNode offre plusieurs propriétés, telles que #setScaleX(float) ou #setTranslationX(float), qui peuvent être utilisées pour affecter toutes les commandes de dessin enregistrées dans. Par exemple, ces propriétés peuvent être utilisées pour se déplacer autour d’un grand nombre d’images sans réécrire tous les appels individuels 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();
                }

Quelques-unes des propriétés peuvent d’abord apparaître redondantes, telles que #setElevation(float) et #setTranslationZ(float). La raison de ces doublons est de permettre une séparation entre les utilisations statiques et temporaires. Par exemple, considérez un bouton qui se déclenche de 2dp à 8dp lorsque vous appuyez. Pour parvenir à ce qu’une application décide de setElevation(2dip), puis appuyez sur pour animer setTranslationZ sur 6dip. Combinée, cela permet d’obtenir la valeur 8dip souhaitée finale, mais l’animation ne doit s’inquiéter que de l’animation de l’élévation de la pression sans avoir à connaître la valeur de départ initiale. #setTranslationX(float) et #setTranslationY(float) sont également fournis pour les utilisations d’animation malgré le chevauchement fonctionnel avec #setPosition(Rect).

La matrice de transformation de RenderNode est calculée au moment du rendu comme suit :

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 de transformation de canevas actuelle, qui est traduite à la position de RenderNode, est ensuite multipliée par la matrice de transformation de RenderNode. Par conséquent, l’ordre des setters de propriétés appelants n’affecte pas le résultat. C’est-à-dire que :

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

équivaut à :

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

<h3>Threading</h3>

RenderNode peut être créé et utilisé sur n’importe quel thread, mais ils ne sont pas thread-safe. Un seul thread peut interagir avec un RenderNode à tout moment donné. Il est essentiel que le RenderNode soit utilisé uniquement sur le même thread avec lequel il est dessiné. Par exemple, lors de l’utilisation de RenderNode avec une vue personnalisée, ce RenderNode ne doit être utilisé qu’à partir du thread d’interface utilisateur.

<h3>Quand effectuer un nouveau rendu</h3>

La plupart des méthodes de mutation RenderNode, telles que #setTranslationX(float), retournent une valeur booléenne indiquant si la valeur a réellement changé ou non. Cela est utile pour détecter si une nouvelle image doit être rendue ou non. Une utilisation classique se présente comme suit :

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

Cela est légèrement plus rapide que d’effectuer une vérification frontale plus explicite si la valeur a changé en comparant la valeur souhaitée par rapport #getTranslationX() à celle qu’elle réduit les transitions JNI. Le mécanisme réel de demande de rendu d’une nouvelle image dépend de la façon dont ce RenderNode est dessiné. S’il est dessiné dans une vue contenante, comme dans l’extrait de code ci-dessus, il suffit d’invalider cette vue. Si, au lieu de cela, le RenderNode est dessiné directement dans un canevas, par exemple avec Surface#lockHardwareCanvas() un nouveau cadre doit être dessiné en appelant Surface#lockHardwareCanvas(), en dessinant à nouveau le RenderNode racine ou tout contenu de niveau supérieur souhaité, et enfin en appelant Surface#unlockCanvasAndPost(Canvas). </p>

Java documentation pour android.graphics.RenderNode.

Les parties de cette page sont des modifications basées sur le travail créé et partagé par Android Open Source et utilisées en fonction des termes décrits dans la Creative Commons 2.5 Attribution License.

Constructeurs

Nom Description
RenderNode(String)

Crée un RenderNode qui peut être utilisé pour enregistrer des lots d’opérations de dessin, et stocker/appliquer des propriétés de rendu lors du dessin.

Propriétés

Nom Description
Alpha

Retourne le niveau de translucence de cette liste d’affichage.

AmbientShadowColor

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

Bottom

Obtient la position inférieure du RenderNode.

CameraDistance

Retourne la distance en Z de la caméra pour ce RenderNode

Class

Retourne la classe runtime de ce Object.

(Hérité de Object)
ClipToBounds

Retourne une valeur indiquant si RenderNode est en train d’effectuer un découpage dans ses limites.

ClipToOutline

Voir #setClipToOutline(boolean)

Elevation

Voir #setElevation(float)

Handle

Handle de l’instance Android sous-jacente.

(Hérité de Object)
HasDisplayList

Retourne si RenderNode a une liste d’affichage.

HasIdentityMatrix

Indique si RenderNode a ou non une transformation d’identité.

HasOverlappingRendering

Indique si le contenu de cette liste d’affichage se chevauche.

HasShadow

Vérifie si RenderNode a une ombre.

Height

Obtient la hauteur du RenderNode, qui est le bas - haut.

IsForceDarkAllowed

Voir #setForceDarkAllowed(boolean)

IsPivotExplicitlySet

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

JniIdentityHashCode

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

(Hérité de Object)
JniPeerMembers

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

Left

Obtient la position gauche du RenderNode.

PeerReference

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

(Hérité de Object)
PivotX

Retourne la valeur de tableau croisé dynamique de cette liste d’affichage sur l’axe X, en pixels.

PivotY

Retourne la valeur de tableau croisé dynamique de cette liste d’affichage sur l’axe Y, en pixels.

Right

Obtient la position appropriée pour renderNode.

RotationX

Retourne la valeur de rotation de cette liste d’affichage autour de l’axe X, en degrés.

RotationY

Retourne la valeur de rotation de cette liste d’affichage autour de l’axe Y, en degrés.

RotationZ

Retourne la valeur de rotation de cette liste d’affichage autour de l’axe Z, en degrés.

ScaleX

Retourne la valeur d’échelle de cette liste d’affichage sur l’axe X.

ScaleY

Retourne la valeur d’échelle de cette liste d’affichage sur l’axe Y.

SpotShadowColor

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

ThresholdClass

Cette API prend en charge l’infrastructure Mono pour Android et n’est pas destinée à être utilisée directement à partir de votre code.

(Hérité de Object)
ThresholdType

Cette API prend en charge l’infrastructure Mono pour Android et n’est pas destinée à être utilisée directement à partir de votre code.

(Hérité de Object)
Top

Obtient la position supérieure du RenderNode.

TranslationX

Retourne la valeur de traduction de cette liste d’affichage sur l’axe X, en pixels.

TranslationY

Retourne la valeur de traduction de cette liste d’affichage sur l’axe Y, en pixels.

TranslationZ

Retourne la valeur de traduction de cette liste d’affichage sur l’axe Z.

UniqueId

Retourne l’ID unique qui identifie ce RenderNode.

UseCompositingLayer

Obtient si une couche de composition doit être utilisée ou non.

Width

Obtient la largeur du RenderNode, qui est la droite à gauche.

Méthodes

Nom Description
BeginRecording()

Identique à #beginRecording(int, int) la largeur et à la hauteur définie sur la largeur et la hauteur de RenderNode.

BeginRecording(Int32, Int32)

Démarre l’enregistrement d’une liste d’affichage pour le nœud de rendu.

Clone()

Crée et retourne une copie de cet objet.

(Hérité de Object)
ComputeApproximateMemoryUsage()

Obtient l’utilisation approximative de la mémoire du RenderNode à des fins de débogage.

DiscardDisplayList()

Réinitialiser les ressources natives.

Dispose()

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

(Hérité de Object)
Dispose(Boolean)

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

(Hérité de Object)
EndRecording()

' Termine l’enregistrement de cette liste d’affichage.

Equals(Object)

Indique si un autre objet est « égal à » celui-ci.

(Hérité de Object)
GetHashCode()

Retourne une valeur de code de hachage pour l’objet.

(Hérité de Object)
GetInverseMatrix(Matrix)

Obtient la transformation actuelle inversée.

GetMatrix(Matrix)

Obtient la matrice de transformation actuelle

JavaFinalize()

Appelé par le garbage collector sur un objet lorsque le garbage collection détermine qu’il n’y a plus de références à l’objet.

(Hérité de Object)
Notify()

Réveille un thread unique qui attend le moniteur de cet objet.

(Hérité de Object)
NotifyAll()

Réveille tous les threads qui attendent le moniteur de cet objet.

(Hérité de Object)
OffsetLeftAndRight(Int32)

Décaler les positions gauche et droite du RenderNode

OffsetTopAndBottom(Int32)

Décaler les valeurs supérieures et inférieures du RenderNode

ResetPivot()

Efface tout tableau croisé dynamique précédemment défini par un appel à #setPivotX(float) ou #setPivotY(float).

SetAlpha(Single)

Définit le niveau de translucency pour la liste d’affichage.

SetAmbientShadowColor(Color)

Définit la couleur de l’ombre ambiante dessinée lorsque RenderNode a une valeur Z positive ou d’élévation et est dessinée à l’intérieur d’une Canvas#enableZ() section.

SetCameraDistance(Single)

Définit la distance le long de l’axe Z (orthogonal au plan X/Y sur lequel RenderNodes sont dessinés) de la caméra à ce RenderNode.

SetClipRect(Rect)

Définit un clip supplémentaire sur RenderNode.

SetClipToBounds(Boolean)

Définissez si le nœud De rendu doit se découper sur ses limites.

SetClipToOutline(Boolean)

Active ou désactive le découpage dans le contour.

SetElevation(Single)

Définit l’élévation de base de ce RenderNode en pixels

SetForceDarkAllowed(Boolean)

Définit s’il faut autoriser ou non l’obscurité à appliquer à ce RenderNode.

SetHandle(IntPtr, JniHandleOwnership)

Définit la propriété Handle.

(Hérité de Object)
SetHasOverlappingRendering(Boolean)

Définit si la liste d’affichage affiche le contenu qui se chevauche.

SetOutline(Outline)

Définit le contour, définissant la forme qui caste une ombre et le chemin d’accès à découper si setClipToOutline est défini.

SetPivotX(Single)

Définit la valeur de tableau croisé dynamique de la liste d’affichage sur l’axe X

SetPivotY(Single)

Définit la valeur de tableau croisé dynamique de la liste d’affichage sur l’axe Y

SetPosition(Int32, Int32, Int32, Int32)

Définit la position du RenderNode.

SetPosition(Rect)

Définit la position du RenderNode.

SetProjectBackwards(Boolean)

Définit si RenderNode doit être dessiné immédiatement après le renderNode ancêtre le plus proche contenant un récepteur de projection.

SetProjectionReceiver(Boolean)

Définit si RenderNode est un récepteur de projection.

SetRenderEffect(RenderEffect)

Configurez l’application android.graphics.RenderEffect à ce RenderNode.

SetRotationX(Single)

Définit la valeur de rotation de la liste d’affichage autour de l’axe X.

SetRotationY(Single)

Définit la valeur de rotation de la liste d’affichage autour de l’axe Y.

SetRotationZ(Single)

Définit la valeur de rotation de la liste d’affichage autour de l’axe Z.

SetScaleX(Single)

Définit la valeur d’échelle de la liste d’affichage sur l’axe X.

SetScaleY(Single)

Définit la valeur d’échelle de la liste d’affichage sur l’axe Y.

SetSpotShadowColor(Color)

Définit la couleur de l’ombre spot dessinée lorsque RenderNode a une valeur Z positive ou d’élévation et est dessinée à l’intérieur d’une Canvas#enableZ() section.

SetTranslationX(Single)

Définit la valeur de traduction de la liste d’affichage sur l’axe X.

SetTranslationY(Single)

Définit la valeur de traduction de la liste d’affichage sur l’axe Y.

SetTranslationZ(Single)

Définit la valeur de traduction de la liste d’affichage sur l’axe Z.

SetUseCompositingLayer(Boolean, Paint)

Contrôle si ce RenderNode doit être rendu ou non dans une mémoire tampon intermédiaire.

ToArray<T>()

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

(Hérité de Object)
ToString()

Retourne une représentation sous forme de chaîne de l’objet.

(Hérité de Object)
UnregisterFromRuntime()

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

(Hérité de Object)
Wait()

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti par em ou><em>interrompu</em>.<>

(Hérité de Object)
Wait(Int64, Int32)

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti< par> em>ou <em>interrompu/em>,< ou jusqu’à ce qu’une certaine quantité de temps réel s’est écoulée.

(Hérité de Object)
Wait(Int64)

Provoque l’attente du thread actuel jusqu’à ce qu’il soit réveillé, généralement en étant <averti< par> em>ou <em>interrompu/em>,< ou jusqu’à ce qu’une certaine quantité de temps réel s’est écoulée.

(Hérité de Object)

Implémentations d’interfaces explicites

Nom Description
IJavaPeerable.Disposed()

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

(Hérité de Object)
IJavaPeerable.DisposeUnlessReferenced()

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

(Hérité de Object)
IJavaPeerable.Finalized()

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

(Hérité de Object)
IJavaPeerable.JniManagedPeerState

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

(Hérité de Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

(Hérité de Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

(Hérité de Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

(Hérité de Object)

Méthodes d’extension

Nom Description
GetJniTypeName(IJavaPeerable)

Obtient le nom JNI du type de l’instance self.

JavaAs<TResult>(IJavaPeerable)

Essayez de forcer self le typeTResult, en vérifiant que le forçage est valide côté Java.

JavaCast<TResult>(IJavaObject)

Effectue une conversion de type vérifiée par le runtime Android.

JavaCast<TResult>(IJavaObject)

RenderNode est utilisé pour générer des hiérarchies de rendu accélérées matériellement.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Essayez de forcer self le typeTResult, en vérifiant que le forçage est valide côté Java.

S’applique à