Autore Topic: Animazione: View che arriva da destra rimbalzando  (Letto 4490 volte)

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Animazione: View che arriva da destra rimbalzando
« il: 06 Settembre 2010, 17:23:00 CEST »
+3
La parte di API relativa alle animazioni è scarsamente documentata. Insieme a JD ho cercato di capirla, ed ecco per voi un animazione carina che può dare valore aggiunto alla vostra applicazione.

Per ottenere l'effetto indicato nel titolo, come anche per tutte gli altri, abbiamo a disposizione due metodi.

Modalità programmatica:

Codice (Java): [Seleziona]
final View target = findViewById(R.id.target);
Animation a = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f);
a.setDuration(1000);
a.setStartOffset(300);
a.setRepeatMode(Animation.RESTART);
a.setRepeatCount(Animation.INFINITE);
a.setInterpolator(AnimationUtils.loadInterpolator(this, android.R.anim.bounce_interpolator));
target.startAnimation(a);


Modalità xml:
salvare il seguente xml come bounce.xml (nome a scelta) nella cartella (da creare)  res/anim/

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="100%p"
android:toXDelta="0"
android:duration="1000"
android:startOffset="300"
android:repeatMode="restart"
android:repeatCount="infinite"
android:interpolator="@android:anim/bounce_interpolator" />

quando vogliamo eseguirla, da codice scriviamo:
Codice (Java): [Seleziona]
Animation bounce = AnimationUtils.loadAnimation(this, R.anim.bounce);
findViewById(R.id.target).startAnimation(bounce);

In questo caso, l'animazione viene ripetuta infinitamente ed eseguita dopo 300ms. Togliere a discrezione i relativi parametri.

Nota: l'interpolatore bounce esiste solo dalla 1.6, quindi reperite la versione delle API:

Codice (Java): [Seleziona]
int sdkVersion = Integer.parseInt( Build.VERSION.SDK );
lanciate questa animazione solo se sdkVersion > 3. altrimenti dovrete cambiare interpolatore... ma l'effetto non sarà lo stesso.



Buon Divertimento  :D

Saluti.
Qlimax
« Ultima modifica: 06 Settembre 2010, 23:17:26 CEST da Qlimax »

Offline areo

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:Animazione: View che arriva da destra rimbalzando
« Risposta #1 il: 08 Settembre 2010, 16:45:09 CEST »
0
grassie ragassi!!

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 717
  • Respect: +151
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Animazione: View che arriva da destra rimbalzando
« Risposta #2 il: 13 Novembre 2010, 19:11:51 CET »
0
Molto interessante. Da quello che capisco a partire da questa snippet e dalla documentazione ufficiale è l'Interpolator che stabilisce l'animazione utilizzata. Ma vedo anche che l'interpolatore è uno solo, quindi non posso fare un'animazione che (per esempio) verticalmente rimbalza ed orizzontalmente scorre senza rimbalzare. Mi date conferma? Vorrei implementare un nuovo tipo di animazione che utilizza due interpolatori differenti, ma solo se non esiste già :)
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Animazione: View che arriva da destra rimbalzando
« Risposta #3 il: 14 Novembre 2010, 13:38:23 CET »
+2
Molto interessante. Da quello che capisco a partire da questa snippet e dalla documentazione ufficiale è l'Interpolator che stabilisce l'animazione utilizzata. Ma vedo anche che l'interpolatore è uno solo, quindi non posso fare un'animazione che (per esempio) verticalmente rimbalza ed orizzontalmente scorre senza rimbalzare. Mi date conferma? Vorrei implementare un nuovo tipo di animazione che utilizza due interpolatori differenti, ma solo se non esiste già :)

Puoi combinare quante animazioni vuoi in un set che poi tratti come se fosse una animazione unica. In questo estratto da un mio esperimento ho combinato due animazioni di rotazione in un AnimationSet, che poi viene usato come una Animation normale.

Codice (Java): [Seleziona]
rotAni = new RotateAnimation(0,degs,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
rotAni.setInterpolator(new DecelerateInterpolator());
rotAni.setDuration(duration);
rotAni.setStartOffset(200);
rotAni.setFillAfter(true);
rotAni.setAnimationListener(mAniListener);

rotAni2 = new RotateAnimation(0,60*((6-pos)%6),Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
rotAni2.setDuration(1000);
rotAni2.setStartOffset(duration+2000);
rotAni2.setFillAfter(true);

ani = new AnimationSet(false);
ani.setFillAfter(true);
ani.addAnimation(rotAni);
ani.addAnimation(rotAni2);

imgView.startAnimation(ani);

Le due animazioni sono rotAni e rotAni2, molto importante è il setDuration e il setStartOffset, che devi impostare opportunamente: esempio io per farle eseguire consecutivamente ho fatto in modo che la seconda partisse ad un tempo maggiore della durata della prima.

Poi crei un AnimationSet ani, a cui aggiungi le due suddette animazioni e che usi come se fosse una animazione monolitica.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Ormet

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Google+
    • Marco Falotico
    • Mostra profilo
  • Dispositivo Android:
    HTC One S
  • Play Store ID:
    Ormet
  • Sistema operativo:
    Windows 7
Re:Animazione: View che arriva da destra rimbalzando
« Risposta #4 il: 18 Febbraio 2012, 16:57:38 CET »
0
..ma si può creare l'animazione anche per dei layout?

Offline Vlad

  • Utente normale
  • ***
  • Post: 271
  • Respect: +16
    • Github
    • Google+
    • vmihalachi
    • vmihalachi
    • Mostra profilo
    • vmihalachi.com
  • Dispositivo Android:
    Samsung galaxy s2 | Samsung galaxy tab 7
  • Play Store ID:
    Vlad Mihalachi
  • Sistema operativo:
    Windows 8
Re:Animazione: View che arriva da destra rimbalzando
« Risposta #5 il: 19 Febbraio 2012, 13:21:53 CET »
0
Dipende da cosa vuoi fare  :D perche se ci metti per esempio un id al contenitore delle view certo che si  :-)

Offline Ormet

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Google+
    • Marco Falotico
    • Mostra profilo
  • Dispositivo Android:
    HTC One S
  • Play Store ID:
    Ormet
  • Sistema operativo:
    Windows 7
Re:Animazione: View che arriva da destra rimbalzando
« Risposta #6 il: 19 Febbraio 2012, 13:29:39 CET »
0
..intendevo per passare da un'activity all'altra..ti porto un esempio:

Codice: [Seleziona]
case R.id.avanti:   
                         setOnMenuItemClickListener5(new View.OnClickListener() {
                                       
                                        public void onClick(View v) {
                                               
                                           Intent loadavanti = new Intent(Activity.this, Activity2.class);
                           startActivity(loadavanti);
                           finish();
                     
                                        }
                                });                      break;
         
..in questo caso volevo far iniziare la seconda activity, che sarebbe un altro layout, con un effetto "bounce"..è possibile?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo

Offline Ormet

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Google+
    • Marco Falotico
    • Mostra profilo
  • Dispositivo Android:
    HTC One S
  • Play Store ID:
    Ormet
  • Sistema operativo:
    Windows 7
Re:Animazione: View che arriva da destra rimbalzando
« Risposta #8 il: 19 Febbraio 2012, 16:25:55 CET »
0
Perfetto!! quello che cercavo!  :-)