RenderNode Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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
- 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 |
| ClipToBounds |
Retourne une valeur indiquant si RenderNode est en train d’effectuer un découpage dans ses limites. |
| ClipToOutline |
Voir |
| Elevation |
Voir |
| 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 |
| 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(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 à |
| 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 |
| 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 |
| 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 |
| 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 |
| JavaAs<TResult>(IJavaPeerable) |
Essayez de forcer |
| 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 |