¿Alguna vez has querido un tipo de sombra CSS en tu proyecto de Android? ¡¿No?! Yo tampoco, pero los diseñadores continúan usándolo y la bandera de la muerte se activa cuando la aplicación no es una copia del diseño. Asi que aqui esta.
Hace mucho más que proyectar una sombra para que el nombre pueda ser inexacto. Internamente, utiliza el script de representación nativo ScriptIntrinsicBlur
para que pueda desenfocar fácilmente todo el diseño como la biblioteca Blurry.
Android 5. + (API 21)
< fr .orandja.shadowlayout.ShadowLayout
Android : relleno = " 8DP " [19659008] Android : layout_gravity = "[1945900"[19459007"] centro "
Android : layout_width = " wrap_content "
Android : layout_height = " wrap_content "
Android : love = " @ drawable / round_corners "
app : shadow_radius = " 8 " [19659008] aplicación : shadow_x_shift = " -1dp
aplicación : shadow_y_shift = " 2DP "
aplicación : shadow_downscale = [196590000]9] " = [1965900000099]" = [196590000]9] " ] 1 "[19659008] aplicación [19659005]: [19659005] shadow_color = [19659007] " # 808 " [19659008] aplicación [19659005]: [19659005] shadow_with_foreground = [19659007] "[1945450000] verdadero ] "[19659008] aplicación [19659005]: [19659005] shadow_with_color = [19659007]" falso "" "19659011] aplicación : shadow_with_dpi_scale 000" "[1965450000]]" " verdadero "
aplicación : shadow_with_css_scale = " verdadero ">
< androidx .appcompat.widget.AppCompatTextView
Android : layout_width = " wrap_content "
Android : layout_height = " wrap_content "
Android : textColor = " @ color / negro "
android : texto = " El rápido zorro marrón salta sobre el perro perezoso "
android : textSize = " 16sp " />
</ fr .orandja.shadowlayout.ShadowLayout>
Parámetros
Valor predeterminado entre paréntesis
shadow_radius
(6f) El radio del desenfoque gaussiano en el flotador. Consulte # Reglas en la sección de reducción de escala para ver cómo funciona.shadow_x_shift
(0dp) Desplazamiento en el eje horizontal en dpshadow_y_shift
(0dp) Desplazamiento en el eje vertical en dpshadow_color
(# 33000000) Color de la sombra proyectadashadow_downscale
(1f) Escala del mapa de bits interno que crea la sombra. Cuanto más grande es la escala, más pequeño es el mapa de bits. En 2, el tamaño del mapa de bits se reduce a la mitad.shadow_with_foreground
(verdadero) Dibuja la vista real en la parte superior de la sombra.shadow_with_color
(falso) Mantenga todos los colores de la vista secundaria en el desenfoque. Junto conshadow_with_foreground
en falso, se puede mostrar una imagen borrosa en la pantalla.shadow_with_dpi_scale
(verdadero) Cambie el tamaño del mapa de bits interno con el dpi actual del teléfono inteligente. Una vista de 100 ppp producirá un mapa de bits de 100 píxeles.shadow_with_css_scale
(verdadero) Cambiar el tamaño en 5/3 más. Porque el desenfoque CSS CSS estándar es la mitad del tamaño del desenfoque real.
Limitaciones
La implementación predeterminada del desenfoque gaussiano de Android ( ScriptIntrinsicBlur
script de representación) está limitada a un máximo de 25 píxeles. Para contrarrestar esto, el diseño cambia el tamaño de la representación real de la vista dentro de un mapa de bits (ALPHA_8 o RGBA con shadow_with_color
a verdadero). Así que difumínalo. Luego dibuja el desenfoque dentro del lienzo. Luego rediseña la vista en el lienzo. (En realidad shadow_with_foreground
) Dibuje la vista dos veces para que pueda ser realmente costosa.
El rayo puede significar más cosas dependiendo de las configuraciones.
Reglas de reducción de escala
Cuando no se reduce, se aplica lo siguiente:
< fr .orandja.shadowlayout.ShadowLayout
aplicación : shadow_radius = " 3f " [19659008] aplicación : shadow_downscale = [1965900007] "" " ] 1 "[19659008] aplicación [19659005]: [19659005] shadow_with_dpi_scale = [19659007]" falso "[19659008] aplicación [19659005]: [19659005] shadow_with_css_c_ " falso " />
El mapa de bits interno tiene las mismas dimensiones que la vista. El radio es el número de píxeles borrados alrededor. Con ppp alto, el efecto será difícil. Sin embargo, en algunos casos, puede ser útil tener un desenfoque agradable a expensas de más memoria. El rango máximo es de 25 píxeles. El parámetro shadow_downscale
multiplica el radio máximo por su valor. Entonces, en shadow_downscale = "2.5" el radio máximo aumenta a 62.5f.
Cuando la aplicación : shadow_with_dpi_scale = "true"
: Reduzca el mapa de bits interno de los ppp actuales del teléfono inteligente. Una vista de 100 ppp producirá un mapa de bits de 100 px. El rayo significa dp . Se desvanece hasta 25dp.
Cuando aplicación: shadow_with_css_scale = "true"
: Como dpi, agregará una reducción de escala de 5/3 para imitar el desenfoque de sombra CSS.
dibuja todo el diseño, puede proyectar una sombra de cualquier cosa. Texto similar:
< fr .orandja.shadowlayout.ShadowLayout
Android : relleno = " 8DP " [19659060]
Android : layout_gravity = "" "" " ] centro "
Android : layout_width = " wrap_content "
Android : layout_height = " wrap_content "
aplicación : shadow_radius = " 1 " [19659060]
aplicación : shadow_x_shift = [196590000]00] = [196590000]] ] 1DP "[19659060]
aplicación : shadow_y_shift = " 2DP "[19659060]
aplicación : shadow_downscale " 1 " [19659060]
aplicación : shadow_color = " # AA000000 " [19659060]
aplicación : [19659005] shadow_with_foreground = " verdadero "
aplicación : shadow_with_color = " verdadero "
aplicación : shadow_with_css_scale = " falso "
aplicación : shadow_with_dpi_scale = " verdadero " >
< androidx .appcompat.widget.AppCompatTextView
Android : layout_width = " wrap_content "
Android : layout_height = " wrap_content "
Android : textColor = " # 808 " [19659060]
android : texto = "[ El veloz zorro marrón salta sobre el perro perezoso "
android : textSize = " 16sp " />
</ fr .orandja.shadowlayout.ShadowLayout>
Dado que shadow_with_color
es verdadero, la sombra dibujada es del mismo color que el texto renderizado. El parámetro de color solo afecta al alfa.
.
Compruebe también
en vivo desde Droidcon, incluida la mayor actualización de Gemini en Android Studio y más lanzamientos del SDK de Android.
Acabamos de lanzar nuestro episodio de otoño de #TheAndroidShow en YouTube etcétera desarrollador.android.comy esta vez …