2010-12-04 20 views
6

Esto quiero que quiero lograr:Android Handler Periódicamente

  1. una actividad que inicialmente sin ClickListener y tiene cuatro textviews todos con fondo blanco

  2. quiero cambiar el color de Vista de Texto 1 a azul. Espere 2 segundos y luego vuelva a cambiarlo a blanco y cambie la vista de texto 2 a azul. espere 2 segundos y luego vuelva a ponerlo en blanco ... así sucesivamente hasta que haya convertido textview 4 en azul y vuelva a blanco.

  3. Una vez que se haya completado, quiero agregar el ClickListener y esperar la entrada del usuario.

¿Cómo puedo lograr esto? Soy nuevo en Android pero entiendo cosas y piezas.

Respuesta

1

Hay no es necesario crear un hilo para esto o animaciones.

La solución es muy sencilla: utilizar Handler.postDelayed() o Handler.sendMessageDelayed():

http://developer.android.com/reference/android/os/Handler.html#postDelayed(java.lang.Runnable, largo) http://developer.android.com/reference/android/os/Handler.html#sendMessageDelayed(android.os.Message, largo)

Para una implementación robusta, asegúrese de eliminar cualquier mensajes pendientes al menos por Activity.onDestroy(). (O si los está publicando en Activity.onStart(), elimínelos en Activity.onStop(); si publica en Activity.onResume(), elimínelos en Activity.onPause().)

+0

Sí, Hackbod, me gusta su método ya que es concisa y Activity tiene un hilo que puedo usar. Estoy usando el método Handler.postDelayed y funciona por primera vez. Necesito entender cómo enviar mensajes y recibir mensajes para volver a llamar a ese hilo. Como puedes ver, ¡soy bastante nuevo! – SingleMalt

2

Puede lograrlo creando secuencias Animation, en código XML o Java, y desencadenándolas en secuencia. Tendrá que definir una secuencia de animación con LayoutAnimationController, al final de la animación, puede agregar ClickListener.

Developer Life tiene un código good tutorial to get you started on animations. Jeff tiene una serie de tutoriales en dos partes sobre animaciones: part 1, part 2.

Espero que esto ayude, indyfromoz

+0

La razón por la que no puedo crear un la animación se debe a que m grid es dinámica. A veces puede tener 4 TextViews y otras veces 6 y, a veces, 9 y así sucesivamente. – SingleMalt

+0

En ese caso, es mejor diseñar la secuencia de animación en código e iniciarla cuando la cuadrícula tenga todas las Vistas en ella. – indyfromoz

0

tengo una muestra para esta tarea, pero por hilo con handleMessage

import android.app.Activity; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.os.Handler; 
import android.widget.EditText; 
import android.widget.TextView; 

public class l15_threadOneaacto extends Activity { 
    /** Called when the activity is first created. */ 
    TextView tv[]=new TextView[4]; 
    EditText et; 
    Thread bcko; 
    static int index=0; 

    boolean isRunning=false; 
    boolean acceptevent=false; 
    Handler hn=new Handler(){ 
     @Override 
     public void handleMessage(android.os.Message msg) { 
      switch (index) { 
      case 0: tv[0].setBackgroundColor(Color.BLUE); break; 
      case 1: tv[0].setBackgroundColor(Color.WHITE); break; 
      case 2: tv[1].setBackgroundColor(Color.BLUE); break; 
      case 3: tv[1].setBackgroundColor(Color.WHITE); break; 
      case 4: tv[2].setBackgroundColor(Color.BLUE); break; 
      case 5: tv[2].setBackgroundColor(Color.WHITE); break; 
      case 6: tv[3].setBackgroundColor(Color.BLUE); break; 
      case 7: tv[3].setBackgroundColor(Color.WHITE); break; 
      } 
      index++; 
      if(index==8){ 
       acceptevent=true; 
       et=(EditText)findViewById(R.id.bbb); 
       et.setText("ready for input"); 
      } 

     }; 

    }; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     tv[0]=(TextView)findViewById(R.id.tx1); 
     tv[1]=(TextView)findViewById(R.id.tx2); 
     tv[2]=(TextView)findViewById(R.id.tx3); 
     tv[3]=(TextView)findViewById(R.id.tx4); 





    } 




    @Override 
    protected void onStart() { 
     // TODO Auto-generated method stub 
     super.onStart(); 

     bcko=new Thread (new Runnable() { 

      @Override 
      public void run() { 
       try { 

         // 
         for(int i=0;i<8 && isRunning;i++){ 
          Thread.sleep(2000); 
         hn.sendMessage(hn.obtainMessage()); 
         } 

       } catch (Exception e) { 
        // TODO: handle exception 
       } 

      } 
     }); 
     isRunning=true; 
     bcko.start(); 



    } 
    @Override 
    protected void onStop() { 
     // TODO Auto-generated method stub 
     super.onStop(); 
     isRunning=false; 
    } 
} 

kayout:

<?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" 
    > 
<TextView 
    android:id="@+id/tx1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#FFFFFFFF" 
    android:text="" 
    /> 
    <TextView 
    android:id="@+id/tx2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#FFFFFFFF" 
    android:text="" 
    /> 
    <TextView 
    android:id="@+id/tx3" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#FFFFFFFF" 
    android:text="" 
    /> 
    <TextView 
    android:id="@+id/tx4" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#FFFFFFFF" 
    android:text="" 
    /> 
    <EditText 
    android:id="@+id/bbb" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="not ready " 
    /> 
</LinearLayout> 

Buena suerte,

+1

Crear un hilo es probablemente el camino a seguir vs animación sobre este tema. Además, vas a necesitar crear un método que eventualmente creará tus OnClickListeners. Su hilo necesitará un control para este método. – user432209

+0

Gracias Mohammed y user432209. Sin embargo, las respuestas de Hackbod parecen mejores. – SingleMalt

Cuestiones relacionadas