Android [AIUTO ]Android studio animazione

Stato
Discussione chiusa ad ulteriori risposte.

irlash

Utente Emerald
10 Dicembre 2014
480
43
366
367
Ultima modifica:
Ciao a tutti ragazzi, volevo fare un'app dove è presente una nave spaziale che si muove, la nave spaziale è una imageview e ho creato per ora due pulsanti che la spostano sopra e sotto, il problema è questo, cioè che l'animazione di movimento in alto l'ho fatta con translate partendo da una y 0% arrivando a 80%, in pratica tutto lo schermo, e il pulsante in basso fa lo stesso con coordinate opposte, succede che se clicco uno dei due pulsanti durante lo spostamento ovviamente ritorna alla coordinata y di partenza per poi ricominciare l'animazione...io vorrei invece fare che se clicco lo sposta di poco, tipo 10 pixel, e in un secondo click riprende da quella posizione e non dall'inizio. Credo di essere stato abbastanza chiaro in ciò che voglio fare, se volete chiarimenti chiedete pure, attendo vostre risposte :) @AlessioDP
 
Puoi postare il codice utilizzato nei bottoni? Anche se credo che alla pressione dovresti prima recuperare la posizione attuale della "nave spaziale" e poi modificare le coordinate.
 
Ultima modifica da un moderatore:
Puoi postare il codice utilizzato nei bottoni? Anche se credo che alla pressione dovresti prima recuperare la posizione attuale della "nave spaziale" e poi modificare le coordinate.
Infatti è quello che avevo pensato, dovrei creare una qualche variabile da richiamare con @Android/ in fromYdelta, però non ci riesco. cmq ecco il codice (metto solo verso l'alto tanto cambiano solo le coordinate):
Pulsante che cliccato richiama il metodo moveup che appunto sposta in alto la nave.
Codice:
<Button
android:layout_width="130dp"
android:layout_height="55dp"
android:text="up"
android:textSize="30dp"
android:id="@+id/button"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:eek:nClick="moveup"/>
Animazione moveup:
Codice:
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:fillAfter="true">
<translate
android:fromYDelta="0%p"
android:toYDelta="80%p"
android:duration="3000"/>
</set>
Metodo moveup nel main:
Codice:
public void moveup (View v) {
im.startAnimation(anim1);
}
im è un tipo imageview (la navicella) che deve essere spostato.
Ovviamente come vedi dal codice ogni volta che clicco parte da 0 per arrivare a 80, io invece vorrei fare che si sposta di poco e che poi se clicco nuovamente parte dalla posizione corrente e non quella iniziale.
 
E te digli una cosa del genere:
Se Y è la posizione attuale, il pulsante farà (Y+10% dello schermo), quindi vedi come ricavare la proprietà Y dell'oggetto e fai una cosa tipo
Codice:
*valoreDaRaggiungere*=*valoreAttuale*+*quantità*
Non ho mai programmato per android, posso solo aiutarti col ragionamento.
 
Non ho mai provato a fare una cosa simile, comunque sarebbe carino vedere l'animazione che sta facendo, con una gif magari.

Allora penso dovresti far così, ma è solo teorico:
Invece di creare il movimento con translate, fare tutto tramite codice, cioè alla pressione dei bottoni vai a modificare la posizione della nave e ricarichi l'immagine, creando così uno spostamento.
 
Allora penso dovresti far così, ma è solo teorico:
Invece di creare il movimento con translate, fare tutto tramite codice, cioè alla pressione dei bottoni vai a modificare la posizione della nave e ricarichi l'immagine, creando così uno spostamento.
Questo l'avevo dato per scontato hahaha
Si, come dice lui, devi fare tutto da codice. L'XML serve per creare una situazione iniziale, non puoi sfruttarlo per questo genere di cose.
 
Il fatto è che nel codice dell'animazione non si possono dichiarare variabili poichè non è codice java ma tutto offerto dalle librerie android, per cui dovrei dichiararmi una variabili da riutilizzare nell'animazione ma non so dove andarla a dichiarare :/ @AlessioDP quello che dici tu è che dovrei scrivere il codice per creare una sequenza di immagini? e farlo nel main?
 
Ho cambiato in questo modo il metodo moveup del main:
Codice moveup:
Codice:
public void moveup (View v) {
y = y-10;
im.setTranslationY(y);
}
sembra mi stia dirigendo verso la retta via ahahha allora ora ogni volta che premo il pulsante up la navetta si sposta di 10 pixel in alto, c'è un piccolo problemino e cioè che si muove a scatti, in pratica se aumento i pixel sembri si teletrasporti ahahhahaah
 
Stato
Discussione chiusa ad ulteriori risposte.