elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  [Android] Modificar ImageView desde un thread
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Android] Modificar ImageView desde un thread  (Leído 1,455 veces)
Nephewless

Desconectado Desconectado

Mensajes: 171


http://www.nephewless.tk


Ver Perfil WWW
[Android] Modificar ImageView desde un thread
« en: 29 Septiembre 2012, 18:16 pm »

Buenas! Cuanto tiempo sin entrar por aquí! jeje!

A ver, os cuento, a ver si me podéis echar un cable, que ya llevo dos días con este problemilla y no consigo solucionarlo.

El caso es que para una práctica de la uni tengo que desarollar un juego de la oca para android. Esta todo hecho, pero me queda un problema por resolver.

Utilitzo una clase que extiende de AnimationDrawable para simular el lanzamiento de los dados y controlo cuando la simulación se termina.

Código
  1.    public abstract class CustomAnimationDrawableNew extends AnimationDrawable {
  2.  
  3.     /** Handles the animation callback. */
  4.     Handler mAnimationHandler;
  5.  
  6.     public CustomAnimationDrawableNew(AnimationDrawable aniDrawable) {
  7.        /* Add each frame to our animation drawable */
  8.        for (int i = 0; i < aniDrawable.getNumberOfFrames(); i++) {
  9.            this.addFrame(aniDrawable.getFrame(i), aniDrawable.getDuration(i));
  10.        }
  11.     }
  12.  
  13.     @Override
  14.     public void start() {
  15.        super.start();
  16.        /*
  17.         * Call super.start() to call the base class start animation method.
  18.         * Then add a handler to call onAnimationFinish() when the total
  19.         * duration for the animation has passed
  20.         */
  21.        mAnimationHandler = new Handler();
  22.        mAnimationHandler.postDelayed(new Runnable() {
  23.  
  24.            public void run() {
  25.                onAnimationFinish();
  26.            }
  27.        }, getTotalDuration());
  28.  
  29.     }
  30.  
  31.     /**
  32.     * Gets the total duration of all frames.
  33.     *
  34.     * @return The total duration.
  35.     */
  36.     public int getTotalDuration() {
  37.  
  38.        int iDuration = 0;
  39.  
  40.        for (int i = 0; i < this.getNumberOfFrames(); i++) {
  41.            iDuration += this.getDuration(i);
  42.        }
  43.  
  44.        return iDuration;
  45.     }
  46.  
  47.     /**
  48.     * Called when the animation finishes.
  49.     */
  50.     abstract void onAnimationFinish();
  51.    }

Bien, en el hilo principal, hago la llamada a esta clase:

Código
  1. CustomAnimationDrawableNew cad = new CustomAnimationDrawableNew((AnimationDrawable) getResources().getDrawable(R.drawable.frame_animation)){
  2. . . .
  3. void onAnimationFinish(){
  4. ...
  5. }
  6. }
  7. iv.setBackgroundDrawable(cad); //inserta la animacio
  8. cad.start(); // inicialitza la animacio
  9.  

y dentro del onAnimationFinish() hago un random del dado, printo en el mismo view donde se aplica la animación la imagen del dado resultante (es decir, si he sacado un uno, la imagen de un dado en la cara del uno xD ), luego calculo los movimientos, los pinto, y lanza el siguiente jugador que lo hace mediante la pulsación de un botón, o bien, el siguiente jugador puede ser automático, y lanza directamente.

El problema es que si se da el último caso, que el jugador es automático, al terminar la animación, empieza la animación del siguiente jugador directamente, sin poder ver que numero ha salido, y la ficha también se mueve a la vez que empieza la animación, y queda fatal.

Me gustaría poder mostrar la animación, inmediatamente cambiar la imagen y poner la del dado correspondiente, hacer una espera (medio segundo por ejemplo), mover la ficha, hacer otra espera (1 segundo) y que lanzara el siguiente jugador. El problema es que si pongo un wait se me queda todo parado, sin haberse cargado la imagen, ni haberse movido la ficha.... y estoy con el mismo problema, ya que al reactivarse estamos con las mismas.

Creo que la solución sería hacer el movimiento de fichas y el cambio de imagen del dado en threads, para así solo parar el thread principal, pero no me deja cambiar las imagenes ya que solo puedo cambiar imagenes del thread donde se han creado... y ahí estoy pillado... :(

Algun consejo o ayudilla?

Lo siento por el tocho... No he sabido resumir más o expliarme mejor...

Si necesitais más información, no dudeis en preguntar!

Muchas gracias de antemano!

Un saludete!


En línea

Nothing real!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda acceder a contol desde thread en otra clase
.NET (C#, VB.NET, ASP)
Fr4NN^ 0 2,362 Último mensaje 9 Mayo 2009, 10:58 am
por Fr4NN^
creacion de thread en linux desde c
GNU/Linux
JAHVEM13 0 1,773 Último mensaje 15 Octubre 2013, 23:06 pm
por JAHVEM13
[Android] Modificar apariencia android
Android
DeMoNcRaZy 4 3,459 Último mensaje 19 Agosto 2015, 11:59 am
por DeMoNcRaZy
Beep desde thread, new + delete
Programación C/C++
patilanz 2 1,819 Último mensaje 24 Agosto 2015, 01:54 am
por patilanz
Como cargar un jpg en un imageview desde un buffer ? (Android)
Java
70N1 0 1,566 Último mensaje 3 Septiembre 2015, 18:50 pm
por 70N1
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines