Autore Topic: Rotate + Translate animation: help!  (Letto 1098 volte)

Offline ligio

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: +1
    • Mostra profilo
    • Ligio Blog
  • Dispositivo Android:
    htc wildfire, ZT180 v2
  • Play Store ID:
    Marco Lijoi
  • Sistema operativo:
    Windows Vista
Rotate + Translate animation: help!
« il: 27 Febbraio 2012, 12:46:00 CET »
0
Ciao!
Ho posizionato una ImageView che mostra una stella in basso al display.
Vorrei che al click su un bottone la stella possa ruotare su se stessa e nello stesso tempo spostarsi in linea verticale ascendente fino al centro del display.

Credevo che sarebbe bastata una semplice animazione di questo tipo:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
   android:fillAfter="true"
   android:shareInterpolator="false">
    <translate
       android:duration="2000"
       android:fromYDelta="0%p"
       android:toYDelta="-50%p" />
    <rotate
        android:interpolator="@android:anim/linear_interpolator"
        android:fromDegrees="0"
        android:toDegrees="360"
        android:duration="2000"
        android:pivotX="50%"
        android:pivotY="50%" />
</set>

E invece mi sono sbagliato!
Questa animazione sposta la stella al centro del display, ma anzichè ruotare su se stessa, la stella ruota "a spirale" uscendo dallo schermo e rientrandovi subito dopo!

Ecco anche il layout

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >

    <ImageView
       android:id="@+id/star"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentBottom="true"
       android:layout_centerHorizontal="true"
       android:layout_marginBottom="10dp"
       android:src="@android:drawable/btn_star_big_on" />

    <ToggleButton
       android:id="@+id/toggle"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentRight="true"
       android:layout_alignParentTop="true"
       android:layout_marginRight="18dp"
       android:layout_marginTop="18dp"
       android:text="ToggleButton" />

</RelativeLayout>

Come posso risolvere?
Grazie a tutti

Offline pivoide

  • Utente junior
  • **
  • Post: 133
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy tab 10.1
  • Play Store ID:
    codicerosso
  • Sistema operativo:
    Ubuntu 11.04
Re:Rotate + Translate animation: help!
« Risposta #1 il: 04 Marzo 2012, 03:33:23 CET »
+1
Probabilmente spulciando la documentazione una soluzione migliore si trova ma io per un problema simile ho risolto 'a mano'. Il codice sposta di dx e dy (in pixel) e ad ogni spostamentio ruota di angle gradi la view. E' un po' incasinato perchè dx e dy sono vecchia posizione  meno nuova invece che, come sarebbe naturale, nuova meno vecchia. Usa un RelativeLayout.
Codice (Java): [Seleziona]
v.setRotation(v.getRotation()+angle);
double sinMove = Math.sin(v.getRotation() * Math.PI / 180);
double cosMove = - Math.cos(v.getRotation() * Math.PI / 180);
v.setLeft(v.getLeft() + (int) (dx * cosMove + dy * sinMove));
v.setRight(v.getRight() + (int) (dx * cosMove + dy * sinMove));
v.setTop(v.getTop() + (int) (dy * cosMove - dx * sinMove));
v.setBottom(v.getBottom() + (int) (dy * cosMove - dx * sinMove));

Con un handle si fa un'animazione che, per quel che ho visto io sull'emulatore, è anche più fluida di quelle 'di serie'
Odio l'inglese e per un informatico non è il massimo