He estado jugando con la programación de Android de forma intermitente durante un par de semanas, y estoy tratando de hacer algo que parece simple, pero creo que me falta algo.En Android, ¿cómo puedo desvanecer suavemente el fondo de un color a otro? (Cómo usar los hilos)
Lo que intento hacer es fundir suavemente el fondo de, digamos, blanco a negro.
He intentado algunas cosas, ninguna de las cuales parece funcionar.
Lo primero que hice fue utilizar un bucle for y el método setBackgroundColor para LinearLayout, cambiando los valores R, G y B juntos de 0 a 255. No funciona.
Puedo hacer uno de los cambios de configuración, pero cuando hago el ciclo obtengo nada más que el último valor. Lo que creo que está sucediendo es que la IU se está bloqueando mientras el ciclo está en progreso y se está descongelando cuando termina el ciclo. Intenté poner retrasos en el ciclo (retrasos de bucle anidados feos y Thread.sleep), todo fue en vano.
¿Alguien me puede dar alguna indicación sobre cómo hacer que esto funcione? ¿Necesito un segundo hilo para hacer el cambio al color? Tengo una idea vaga de los hilos, aunque nunca los he usado.
Mi código de ejemplo que muestra más o menos lo que yo estoy tratando de hacer es la siguiente:
main.xml es:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/screen"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>
Y mi código de Java es (el 0,01 Inc es sólo para actuar como. un mecanismo de retardo feo para tratar de ver la visualización de los colores cambian lentamente):
package nz.co.et.bgfader;
import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
public class bgfader extends Activity {
LinearLayout screen;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
screen = (LinearLayout) findViewById(R.id.screen);
for (int i = 0; i < 65535; i+=0.01) {
screen.setBackgroundColor(0xff000000 + i);
}
}
}
Cualquier ayuda sería muy apreciada
Saludos
Steve
¡Gracias! :) Eso lo hizo funcionar, con algunos cambios menores. Tuve que hacer que fuera global, ya que no se podía acceder dentro del método de ejecución de lo contrario (o podría haberlo pasado, supongo). También tuve que ajustar el try/catch ya que no compilaría para mí tal como estaba. Muchas gracias, eso me ha estado volviendo loco durante un par de días. Voy a jugar con los hilos y ver si puedo hacer algo interesante con este código ahora está funcionando. – Steve
Esta no es una buena práctica. No está permitido actualizar la interfaz de usuario de un hilo BG. La sugerencia de @ Amy es la correcta. Está el proyecto http://nineoldandroids.com/ que implementa el ObjectAnimator para Android anterior a 3.0 – tofi9
¿Qué sucede si quiero desvanecer un color a otro usando un valor 'seekbar' en' TextView'? – Si8