RenderNode Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
- 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 |
| ClipToBounds |
Devuelve si renderNode está recortando o no sus límites. |
| ClipToOutline |
Vea |
| Elevation |
Vea |
| 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 |
| 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(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 |
| 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 |
| 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 |
| 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 |
| 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 |
| JavaAs<TResult>(IJavaPeerable) |
Intente coerción |
| 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 |