Autore Topic: Sospensione animazione eseguita con un OnClick  (Letto 725 volte)

Offline Mikela

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire HD
  • Sistema operativo:
    Ubuntu 10.10
Sospensione animazione eseguita con un OnClick
« il: 15 Marzo 2011, 14:50:34 CET »
0
Salve.
Ho iniziato da 3-4 giorni a programmare activity su Android. Ho delle buone basi di Java e l'XML lo sto imparando per l'occasione.

Ho un problema che mi ha bloccata al quale non riesco a trovare soluzione.
Praticamente sto creando una specie di tamagotchi, semplicemente ho un "animaletto" che al momento le uniche due cose che fa sono:
 * tremare: ogni volta che si clicca sull' "animaletto"
 * volare: e dovrebbe farlo di default.

Ora il mio problema è che vorrei fare in modo che una volta che ha smesso di tremare se non si riclicca sull' "animaletto" entro un tot di tempo (si suppone molto breve) questo deve tornare a volare come comportamento di default in attesa di altri eventi.

Ho fatto mille tentativi ma non riesco a gestire la cosa. Ho implementato due funzioni fly() e shake() e successivamente shake() l'ho trasformata in una classe estendendola a Throwable sperando di riuscire a gestire il tutto con un try-catch, operazione che, seppur senza errori nel codice, è risultata un fiasco poichè nel momento che clicco sull'animaletto mi compare un messaggio d'errore e l'applicazione termina.

Avete qualche idea?

Vi ringrazio fin d'ora e spero di aver messo il topic nella sezione giusta perchè dopo tutto si tratta di animazione, altrimenti sposto il topic dove mi suggerito.

Grazie ancora, Michela.

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Sospensione animazione eseguita con un OnClick
« Risposta #1 il: 15 Marzo 2011, 16:03:07 CET »
0
Off-Topic:
Ho fatto mille tentativi ma non riesco a gestire la cosa. Ho implementato due funzioni fly() e shake() e successivamente shake() l'ho trasformata in una classe estendendola a Throwable sperando di riuscire a gestire il tutto con un try-catch, operazione che, seppur senza errori nel codice, è risultata un fiasco poichè nel momento che clicco sull'animaletto mi compare un messaggio d'errore e l'applicazione termina.
Non ho capito in che modo vorresti gestire la cosa con try/catch, sarebbe il caso che la spiegassi meglio.
Ad ogni modo ti dico come gestirei io la cosa: ogni volta che finisce lo shake(), farei partire un thread che attende un tot e che, se non interrotto, al suo termine invoca la fly().
Nel frattempo, ogni volta che eseguo lo shake, interrompo il thread o comunque faccio in modo che termini fallendo, senza eseguire la fly() alla fine; in questo modo se riclicco sull'animaletto entro tot, non volerà.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Mikela

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire HD
  • Sistema operativo:
    Ubuntu 10.10
Re:Sospensione animazione eseguita con un OnClick
« Risposta #2 il: 22 Marzo 2011, 09:58:29 CET »
0
Grazie mille! Ho risolto seguendo il tuo consiglio e funziona alla perfezione! Ci ho messo un po' perche mi sono dovuta studiare i thread che non avevo idea di cosa fossero ma ce l'ho fatta ^^"

Ora però ho un nuovo problema. Drag&Drop.
Mi spiego. Ho un biscottino che devo trascinare sull'animaletto. Ora, ho fatto le prove su un progetto a parte e sono riuscita ad implementare il Drag modificando il padding del layout. Ovviamente nel momento che ho implementato il tutto sul progetto originale funziona ma in modo sbagliato ovvero settando il padding del layout mi muove tutto il layout e non solo il biscotto (che  è un ImageView). Ho provato a settare il padding del biscotto ma invece di spostarmelo si ridimensiona -.-"

Non c'è un modo per modificare le coordinate dell'ImageView? Sono tre giorni che ci sto lavorando e non riesco a trovare una soluzione.

Grazie mille per l'aiuto!

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Sospensione animazione eseguita con un OnClick
« Risposta #3 il: 22 Marzo 2011, 10:21:11 CET »
0
perché non provi ad implementare un touchlistener e, ad ogni aggiornamento della posizione (una volta fatto partire il drag), ridisegnare il tutto, con il biscotto in una nuova posizione.
Quello che ti consiglio, di fatto, è di non gestire in maniera standard la cosa, ma di implementarti una view tua nella quale disegni tutto quello che ti serve. E' il modo migliore di gestire la cosa, perché hai il pieno controllo del tutto.

Vatti a vedere questo mio post e dai un'occhiata al link. Se hai dei dubbi fatti risentire sul forum.
^_^


p.s.: in generale, se l'aiuto ti è stato utile, puoi cliccare sul pollice in su.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Mikela

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire HD
  • Sistema operativo:
    Ubuntu 10.10
Re:Sospensione animazione eseguita con un OnClick
« Risposta #4 il: 22 Marzo 2011, 15:28:05 CET »
0
Ok, è molto simile  a quello che ho già fatto, il problema è che finchè l'oggetto è un punto o una qualsiasi forma predefinita che mette a disposizione funzioni per spostarla non c'è problema, ma io devo spostare un immagine...quindi ho pensato di usare un bitmap. Sono riuscita a caricare il bitmap ma non riesco a dare al bitmap le nuove coordinate per muoverlo =/

Offline Mikela

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire HD
  • Sistema operativo:
    Ubuntu 10.10
Re:Sospensione animazione eseguita con un OnClick
« Risposta #5 il: 22 Marzo 2011, 15:35:28 CET »
0
Questo è il mio codice:

Codice (Java): [Seleziona]
package net.planetbud.test.cookie;

import android.app.Activity;
import android.graphics.BitmapFactory;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.RelativeLayout;


public class cookie extends Activity {
    /** Called when the activity is first created. */
        private float x;
        private float y;
        private RelativeLayout layout;
        private Bitmap bit;
        private Canvas can;
        private Paint paint;
       
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        bit = BitmapFactory.decodeResource(getResources(), R.drawable.icon);      //carichiamo l'immagine in una bitmap
        paint = new Paint();
       
        can = new Canvas();
        can.drawBitmap(bit, bit.getWidth(),bit.getHeight(),null);
       
        layout = (RelativeLayout)findViewById(R.id.lay);
       
        layout.setOnTouchListener(new OnTouchListener() {
               
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                        int action = event.getAction();
                       
                                switch(action){
                                case MotionEvent.ACTION_DOWN:                            
                                        break;
               
                                case MotionEvent.ACTION_MOVE:
                                        x = event.getX();
                                        y = event.getY();
                                        can.drawBitmap(bit, x, y, paint);
                                break;
                               
                                case MotionEvent.ACTION_UP:
                                        x = event.getX();
                                        y = event.getY();
                                        can.drawBitmap(bit, x, y, paint);
                                break;
                                }
                               
                                return true;
                        }
                });
    }
}
« Ultima modifica: 22 Marzo 2011, 15:50:36 CET da 7h38ugg3r »

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Sospensione animazione eseguita con un OnClick
« Risposta #6 il: 22 Marzo 2011, 16:17:08 CET »
0
Ho modificato il tuo post, perché il codice java va messo in appositi tag.
Quello che fai tu non è quello che c'è scritto su quel link.
Il touch va gestito nell'activity principale, e non all'interno del "cookie", perché i suoi confini sono limitati e rappresentano un piccolo sottoinsieme dello schermo: così puoi gestirti gli oggetti al suo interno.
Cambia il modo di affrontare la cosa.
Ti crei una classe  che estende una view: questa farà da container per il tuo schermo.
Questa view sarà l'unica che dovrai inserire nel layout xml.
Dopodiché, nella onDraw di questo container, ti gestirai il disegno delle tue entità; quindi disegnerai l'animaletto (una bitmap da piazzare nello schermo), e il biscotto.....
Nel frattempo, implementando l'ontouchlistener, controllerai se al touch hai "preso" il biscotto...e da lì comportarsi di conseguenza.....
Leggiti bene il link che ho postato in quell'intervento che ti ho segnalato.
Fammi sapere, comunque.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/