RenderEffect-Reducir la saturación-Esculpir Android
En el momento de escribir este artículo, en marzo de 2021, la olfato previa auténtico para desarrolladores de Android 12 llegó recientemente. Si hay muchos rumores, Android 12 tendrá una modernización del sistema de diseño citación Material NEXT. Aunque los detalles de lo que esto en realidad significa son vagos, puede tener similitudes con otras plataformas móviles. Un patrón de interfaz de usufructuario popular en iOS es desenfocar el fondo detrás del componente de interfaz de usufructuario en primer plano. Por ejemplo, un cuadro de diálogo.Durante mucho tiempo, esto se puede conseguir dibujando en Android View
A un Bitmap
Luego use RenderScript u OpenGL para difuminarlo. Pero existen posibles problemas de rendimiento y no todo se realiza de forma coherente en toda la plataforma. Oportuno a la aparición de nuevas API en Android 12, esta situación parece estar a punto de cambiar: RenderEffect
En el artículo inicial, estudiamos cómo aplicar el impresión de desenfoque a View
Escalafón.Sin requisa, este no es el único impresión que podemos conseguir. RenderEffect
-hay mas. En este artículo, exploraremos otra reducción de la saturación del impresión. Pero más allá de eso, además estudiaremos cómo aplicar múltiples mercadería a la vez.
Desaturación
En marzo de 2013, publiqué un artículo que mostraba cómo usar ColorMatrixColorFilter
. Estos son los días previos a nuestra API de sombreado incorporada. View
. Estos solo llegaron en las piruletas anunciadas en 2014. ColorMatrixColorFilter()
Sigue siendo una útil poderosa para cambiar dinámicamente los colores de imágenes y rudimentos gráficos.
RenderEffect
Creación de soporte RenderEffect
Colchoneta de ColorFilter
Nos permite aplicar estos mercadería como parte del proceso de renderizado acelerado por hardware.
Para desaturar la imagen, primero creamos un ColourMatrix
Objeto y ajuste el nivel de saturación.Lo envolvemos en ColorMatricColorFilter
Puede estar de moda como RenderEffect
Método de industria:
valía Propósito de desaturación = Propósito de renderizado.createColorFilterEffect( ColorMatrixColorFilter( Matriz de color().Solicitud setSaturation(Saturación) ) ) |
Lo aplicamos exactamente de la misma forma que el impresión de desenfoque:
Ceñido.imagen.setRenderEffect(desaturateEffect) |
Ahora, podemos ajustar la saturación de la imagen. La saturación aquí es 1, con información de color completa:
Esto es 0: se eliminan todos los colores, dejando una imagen en escalera de grises:
Sujeción
Como mencioné en el artículo inicial, aunque la API es un poco más completa, podemos obtener una decano funcionalidad. Un buen ejemplo es vincular múltiples mercadería.Nuestro método creador de mercadería de desenfoque y desaturación produce RenderEffect
Ejemplo. Sin requisa, estos tienen mercadería muy diferentes.
Podemos encadenar múltiples RenderEffects
juntos:
Propósito de renderizado.createChainEffect(Propósito de desenfoque, Propósito de desaturación) |
Esto createChainEffect()
El método en sí mismo volverá RenderEffect
Instancia, podemos aplicarlo a View
Exactamente lo mismo que hicimos ayer.Ahora, podemos usar el desenfoque y la desaturación como uno RenderEffect
:
Cerca de mencionar que el orden de los rudimentos de la prisión puede ser importante. En este caso, la canalización realizará primero la desaturación y luego el desenfoque. Si revertimos estos resultados, los resultados serán sutilmente diferentes. Dependiendo del impresión exacto constante, estas diferencias pueden volverse más pronunciadas.
Sin requisa, la prisión RenderEffect
Se puede aplicar a View
Estructura jerárquica, como hicimos para el impresión de desenfoque:
en conclusión
Espero que a partir de estos sencillos ejemplos de implementación, podamos ver claramente lo que RenderEffect puede conseguir. Adicionalmente, la capacidad de vincularlos requiere una cantidad muy pequeña de trabajo adicional para aumentar significativamente la funcionalidad. De hecho, una tilde extra de código.
Hemos introducido algunos conocimientos básicos que podemos utilizar. RenderEffect
. Sospecho que volveré a examinar esta pregunta y ofreceré otros ejemplos interesantes en el futuro. Si desea verlos, por valimiento deje un comentario o envíeme un correo electrónico para contactarme, detalles de contacto aquí.
relacionados
Copyright © 2021 Estilo de Android. reservados todos los derechos.