RenderNode Clase

Definición

RenderNode se usa para compilar jerarquías de representación aceleradas por hardware.

[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
Herencia
RenderNode
Atributos

Comentarios

RenderNode se usa para compilar jerarquías de representación aceleradas por hardware. Cada RenderNode contiene una lista para mostrar, así como un conjunto de propiedades que afectan a la representación de la lista de visualización. RenderNodes se usan internamente para todas las vistas de forma predeterminada y no se usan normalmente directamente.

RenderNodes se usan para dividir el contenido de representación de una escena compleja en partes más pequeñas que se pueden actualizar individualmente de forma más barata. La actualización de parte de la escena solo necesita actualizar la lista de visualización o las propiedades de un pequeño número de RenderNode en lugar de volver a dibujar todo desde cero. Un RenderNode solo necesita que se vuelva a grabar su lista de presentación cuando se debe cambiar su contenido por sí solo. RenderNodes también se puede transformar sin volver a grabar la lista de visualización a través de las propiedades de transformación.

Un editor de texto podría almacenar cada párrafo en su propio RenderNode. Por lo tanto, cuando el usuario inserta o quita caracteres, solo se debe grabar de nuevo la lista para mostrar del párrafo afectado.

<h3>Aceleración< de hardware/h3>

RenderNodes se puede dibujar mediante .RecordingCanvas No se admiten en el software. Asegúrese siempre de que usa android.graphics.Canvas para representar una lista de visualización se acelera por hardware mediante android.graphics.Canvas#isHardwareAccelerated().

<h3>Crear 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>Dibujar un RenderNode en una vista</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>Liberar recursos</h3>

Este paso no es obligatorio, pero se recomienda si desea liberar recursos mantenidos por una lista de presentación lo antes posible. Lo más significativo es que cualquier mapa de bits que pueda contener.

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

<h3>Properties</h3>

Además, un RenderNode ofrece varias propiedades, como #setScaleX(float) o #setTranslationX(float), que se pueden usar para afectar a todos los comandos de dibujo grabados en . Por ejemplo, estas propiedades se pueden usar para desplazarse por un gran número de imágenes sin volver a emitir todas las llamadas individuales 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();
                }

Algunas de las propiedades pueden aparecer por primera vez redundantes, como #setElevation(float) y #setTranslationZ(float). La razón de estos duplicados es permitir una separación entre usos estáticos y transitorios. Por ejemplo, considere un botón que se eleva de 2dp a 8dp cuando se presiona. Para lograr que una aplicación decida establecerElevation(2dip) y, a continuación, presionar para animar setTranslationZ a 6dip. Combinado esto logra el valor 8dip final deseado, pero la animación solo necesita preocuparse por animar la elevación desde la prensa sin necesidad de conocer el valor inicial inicial. #setTranslationX(float) y #setTranslationY(float) se proporcionan de forma similar para los usos de animación a pesar de la superposición funcional con #setPosition(Rect).

La matriz de transformación de RenderNode se calcula en tiempo de representación de la siguiente manera:

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 matriz de transformación del lienzo actual, que se traduce a la posición de RenderNode, se multiplica por la matriz de transformación de RenderNode. Por lo tanto, el orden de los establecedores de propiedades de llamada no afecta al resultado. Eso es decir:

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

equivale a:

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

<h3>Threading</h3>

RenderNode se puede crear y usar en cualquier subproceso, pero no son seguros para subprocesos. Solo un único subproceso puede interactuar con un RenderNode en un momento dado. Es fundamental que renderNode solo se use en el mismo subproceso con el que se dibuja. Por ejemplo, cuando se usa RenderNode con una vista personalizada, solo se debe usar RenderNode desde el subproceso de la interfaz de usuario.

<h3>Cuándo volver a representar</h3>

Muchos de los métodos de mutación renderNode, como #setTranslationX(float), devuelven un valor booleano que indica si el valor ha cambiado realmente o no. Esto resulta útil para detectar si se debe representar o no un nuevo marco. Un uso típico tendría el siguiente aspecto:

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

Esto es marginalmente más rápido que hacer una comprobación inicial más explícita si el valor ha cambiado comparando el valor deseado en #getTranslationX() cuanto minimiza las transiciones de JNI. El mecanismo real de solicitar un nuevo fotograma que se va a representar dependerá de cómo se dibuja este RenderNode. Si se dibuja en una vista contenedora, como en el fragmento de código anterior, simplemente invalida esa vista funciona. Si, en su lugar, renderNode se dibuja directamente en un lienzo, como con Surface#lockHardwareCanvas() , se debe dibujar un nuevo fotograma llamando Surface#lockHardwareCanvas()a , vuelva a dibujar el RenderNode raíz o cualquier contenido de nivel superior que desee y, por último, llamando a Surface#unlockCanvasAndPost(Canvas). </p>

Java documentación para android.graphics.RenderNode.

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el Android y se usan según los términos descritos en creative Creative Commons 2.5 Attribution License.

Constructores

Nombre Description
RenderNode(String)

Crea un nuevo RenderNode que se puede usar para registrar lotes de operaciones de dibujo y almacenar o aplicar propiedades de representación cuando se dibujan.

Propiedades

Nombre Description
Alpha

Devuelve el nivel de translucencia de esta lista de visualización.

AmbientShadowColor

RenderNode se usa para compilar jerarquías de representación aceleradas por hardware.

Bottom

Obtiene la posición inferior del RenderNode.

CameraDistance

Devuelve la distancia en Z de la cámara para este RenderNode.

Class

Devuelve la clase en tiempo de ejecución de este Objectobjeto .

(Heredado de Object)
ClipToBounds

Devuelve si renderNode está recortando o no sus límites.

ClipToOutline

Vea #setClipToOutline(boolean).

Elevation

Vea #setElevation(float).

Handle

Identificador de la instancia de Android subyacente.

(Heredado de Object)
HasDisplayList

Devuelve si RenderNode tiene una lista para mostrar.

HasIdentityMatrix

Indica si renderNode tiene o no una transformación de identidad.

HasOverlappingRendering

Indica si el contenido de esta lista de visualización se superpone.

HasShadow

Comprueba si renderNode tiene una sombra.

Height

Obtiene el alto del RenderNode, que es la parte inferior- superior.

IsForceDarkAllowed

Vea #setForceDarkAllowed(boolean).

IsPivotExplicitlySet

RenderNode se usa para compilar jerarquías de representación aceleradas por hardware.

JniIdentityHashCode

Obtiene el código hash de identidad asignado a este Java del mismo nivel por el tiempo de ejecución de interoperabilidad.

(Heredado de Object)
JniManagedPeerState

RenderNode se usa para compilar jerarquías de representación aceleradas por hardware.

(Heredado de JavaObject)
JniPeerMembers

RenderNode se usa para compilar jerarquías de representación aceleradas por hardware.

Left

Obtiene la posición izquierda del RenderNode.

PeerReference

Obtiene la referencia de objeto JNI para este Java del mismo nivel.

(Heredado de Object)
PivotX

Devuelve el valor dinámico de esta lista para mostrar en el eje X, en píxeles.

PivotY

Devuelve el valor dinámico de esta lista para mostrar en el eje Y, en píxeles.

Right

Obtiene la posición correcta para renderNode.

RotationX

Devuelve el valor de rotación de esta lista para mostrar alrededor del eje X, en grados.

RotationY

Devuelve el valor de rotación de esta lista para mostrar alrededor del eje Y, en grados.

RotationZ

Devuelve el valor de rotación de esta lista para mostrar alrededor del eje Z, en grados.

ScaleX

Devuelve el valor de escala de esta lista para mostrar en el eje X.

ScaleY

Devuelve el valor de escala de esta lista para mostrar en el eje Y.

SpotShadowColor

RenderNode se usa para compilar jerarquías de representación aceleradas por hardware.

ThresholdClass

Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código.

(Heredado de Object)
ThresholdType

Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código.

(Heredado de Object)
Top

Obtiene la posición superior del RenderNode.

TranslationX

Devuelve el valor de traducción de esta lista para mostrar en el eje X, en píxeles.

TranslationY

Devuelve el valor de traducción de esta lista para mostrar en el eje Y, en píxeles.

TranslationZ

Devuelve el valor de traducción de esta lista para mostrar en el eje Z.

UniqueId

Devuelve el identificador único que identifica este RenderNode.

UseCompositingLayer

Obtiene si se fuerza o no el uso de una capa de redacción.

Width

Obtiene el ancho del RenderNode, que es el derecho a la izquierda.

Métodos

Nombre Description
BeginRecording()

Igual que #beginRecording(int, int) con el ancho y alto establecido en el propio ancho y alto de RenderNode.

BeginRecording(Int32, Int32)

Inicia la grabación de una lista para mostrar del nodo de representación.

Clone()

Crea y devuelve una copia de este objeto.

(Heredado de Object)
ComputeApproximateMemoryUsage()

Obtiene el uso aproximado de memoria de RenderNode con fines de depuración.

Construct(JniObjectReference, JniObjectReferenceOptions)

RenderNode se usa para compilar jerarquías de representación aceleradas por hardware.

(Heredado de JavaObject)
DiscardDisplayList()

Restablezca los recursos nativos.

Dispose()

Libera los recursos mantenidos por este Java del mismo nivel.

(Heredado de Object)
Dispose(Boolean)

Libera los recursos mantenidos por este Java del mismo nivel.

(Heredado de Object)
DisposeUnlessReferenced()

RenderNode se usa para compilar jerarquías de representación aceleradas por hardware.

(Heredado de JavaObject)
EndRecording()

' Finaliza la grabación de esta lista para mostrar.

Equals(Object)

RenderNode se usa para compilar jerarquías de representación aceleradas por hardware.

(Heredado de JavaObject)
Equals(Object)

Indica si algún otro objeto es "igual a" este.

(Heredado de Object)
GetHashCode()

Devuelve un valor de código hash para el objeto .

(Heredado de Object)
GetInverseMatrix(Matrix)

Obtiene la transformación actual invertida.

GetMatrix(Matrix)

Obtiene la matriz de transformación actual.

JavaFinalize()

Lo llama el recolector de elementos no utilizados en un objeto cuando la recolección de elementos no utilizados determina que no hay más referencias al objeto .

(Heredado de Object)
Notify()

Activa un único subproceso que está esperando en el monitor de este objeto.

(Heredado de Object)
NotifyAll()

Activa todos los subprocesos que están esperando en el monitor de este objeto.

(Heredado de Object)
OffsetLeftAndRight(Int32)

Desplaza las posiciones izquierda y derecha para RenderNode.

OffsetTopAndBottom(Int32)

Desplaza los valores superior e inferior de RenderNode.

ResetPivot()

Borra cualquier tabla dinámica establecida previamente mediante una llamada a #setPivotX(float) o #setPivotY(float).

SetAlpha(Single)

Establece el nivel de translucencia de la lista de visualización.

SetAmbientShadowColor(Color)

Establece el color de la sombra ambiental que se dibuja cuando RenderNode tiene un valor Z positivo o de elevación y se dibuja dentro de una Canvas#enableZ() sección.

SetCameraDistance(Single)

Establece la distancia a lo largo del eje Z (ortogonal al plano X/Y en el que se dibujan RenderNodes) de la cámara a este RenderNode.

SetClipRect(Rect)

Establece un clip adicional en RenderNode.

SetClipToBounds(Boolean)

Establezca si el nodo Render debe recortarse en sus límites.

SetClipToOutline(Boolean)

Habilita o deshabilita el recorte en el esquema.

SetElevation(Single)

Establece la elevación base de este RenderNode en píxeles

SetForceDarkAllowed(Boolean)

Establece si se va a permitir que la fuerza oscura se aplique a este RenderNode.

SetHandle(IntPtr, JniHandleOwnership)

Establece la propiedad Handle.

(Heredado de Object)
SetHasOverlappingRendering(Boolean)

Establece si la lista para mostrar representa el contenido que se superpone.

SetOutline(Outline)

Establece el contorno, define la forma que convierte una sombra y la ruta de acceso que se va a recortar si se establece setClipToOutline.

SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

RenderNode se usa para compilar jerarquías de representación aceleradas por hardware.

(Heredado de JavaObject)
SetPivotX(Single)

Establece el valor dinámico de la lista de visualización en el eje X.

SetPivotY(Single)

Establece el valor dinámico de la lista para mostrar en el eje Y.

SetPosition(Int32, Int32, Int32, Int32)

Establece la posición del RenderNode.

SetPosition(Rect)

Establece la posición del RenderNode.

SetProjectBackwards(Boolean)

Establece si el RenderNode debe dibujarse inmediatamente después del rendernode antecesor más cercano que contiene un receptor de proyección.

SetProjectionReceiver(Boolean)

Establece si RenderNode es un receptor de proyección.

SetRenderEffect(RenderEffect)

Configure para android.graphics.RenderEffect que se aplique a este RenderNode.

SetRotationX(Single)

Establece el valor de rotación de la lista de visualización alrededor del eje X.

SetRotationY(Single)

Establece el valor de rotación de la lista de visualización alrededor del eje Y.

SetRotationZ(Single)

Establece el valor de rotación de la lista de visualización alrededor del eje Z.

SetScaleX(Single)

Establece el valor de escala de la lista para mostrar en el eje X.

SetScaleY(Single)

Establece el valor de escala de la lista para mostrar en el eje Y.

SetSpotShadowColor(Color)

Establece el color de la sombra puntual que se dibuja cuando RenderNode tiene un valor Z positivo o de elevación y se dibuja dentro de una Canvas#enableZ() sección.

SetTranslationX(Single)

Establece el valor de traducción de la lista para mostrar en el eje X.

SetTranslationY(Single)

Establece el valor de traducción de la lista para mostrar en el eje Y.

SetTranslationZ(Single)

Establece el valor de traducción de la lista para mostrar en el eje Z.

SetUseCompositingLayer(Boolean, Paint)

Controla si se va a forzar o no que este RenderNode se represente en un búfer intermedio.

ToArray<T>()

Crea una matriz administrada a partir de este contenedor de matriz Java.

(Heredado de Object)
ToString()

Devuelve una representación de cadena del objeto .

(Heredado de Object)
UnregisterFromRuntime()

Anula el registro de este Java del mismo nivel del tiempo de ejecución de interoperabilidad.

(Heredado de Object)
Wait()

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser em notificado/em< o >em<interrumpido>/em<.><>

(Heredado de Object)
Wait(Int64, Int32)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)
Wait(Int64)

Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real.

(Heredado de Object)

Implementaciones de interfaz explícitas

Nombre Description
IJavaPeerable.Disposed()

RenderNode se usa para compilar jerarquías de representación aceleradas por hardware.

(Heredado de JavaObject)
IJavaPeerable.Finalized()

RenderNode se usa para compilar jerarquías de representación aceleradas por hardware.

(Heredado de JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

RenderNode se usa para compilar jerarquías de representación aceleradas por hardware.

(Heredado de JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

RenderNode se usa para compilar jerarquías de representación aceleradas por hardware.

(Heredado de JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

RenderNode se usa para compilar jerarquías de representación aceleradas por hardware.

(Heredado de JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

RenderNode se usa para compilar jerarquías de representación aceleradas por hardware.

(Heredado de JavaObject)

Métodos de extensión

Nombre Description
GetJniTypeName(IJavaPeerable)

Obtiene el nombre JNI del tipo de la instancia self.

JavaAs<TResult>(IJavaPeerable)

Intente coerción self para escribir TResult, comprobando que la coerción es válida en el lado de Java.

JavaCast<TResult>(IJavaObject)

Realiza una conversión de tipos comprobados en tiempo de ejecución de Android.

JavaCast<TResult>(IJavaObject)

RenderNode se usa para compilar jerarquías de representación aceleradas por hardware.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Intente coerción self para escribir TResult, comprobando que la coerción es válida en el lado de Java.

Se aplica a