Autore Topic: animazioni di bottoni  (Letto 1106 volte)

Offline F4L|{0

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Play Store ID:
    Jesi
  • Sistema operativo:
    Windows XP + ubuntu
animazioni di bottoni
« il: 12 Ottobre 2011, 00:04:46 CEST »
0
salve ho incontrato un piccolo problema nella gestione delle animazioni dei bottoni.
il problema è il seguente:
applico ad un bottone due animazionia, una di tipo "fade" e l'altra "translate". bene le due animazioni vengono eseguite, quindi il bottone diventa via via piu visibile e si trasla nella posizione voluta. il problema nasce però per quanto riguarda l'area di click. infatti essa rimane nella posizione originale, quindi non viene traslata.

di seguito la parte che esegue l'animazione

Codice: [Seleziona]
    //Test
    testButton = (Button)findViewById(R.id.testView);
    testButton.setOnClickListener(new View.OnClickListener(){public void onClick( View view){BtnSlidindViewStart(view);}});
    //testButton.setEnabled(false);
    AnimationSet exchangeAnimation = new AnimationSet(true);
    exchangeAnimation.setFillAfter(true);
    exchangeAnimation.setAnimationListener(animationListener);
    exchangeAnimation.addAnimation(AnimationHelper.fadeAnimation(0, 1, 2000));
    exchangeAnimation.addAnimation(AnimationHelper.translateAnimation(0, 1, 0, 1, 1500));
    testButton.startAnimation(exchangeAnimation);
    //testButton.setEnabled(true);


Offline capa89

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
Re:animazioni di bottoni
« Risposta #1 il: 12 Ottobre 2011, 01:02:15 CEST »
0
visto che hai usato un listener, hai provato a settare la nuova posizione nel OnAnimationEnd? A volte setFillAfter non funziona...puoi verificarlo con isFillEnabled...

Offline F4L|{0

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Play Store ID:
    Jesi
  • Sistema operativo:
    Windows XP + ubuntu
Re:animazioni di bottoni
« Risposta #2 il: 12 Ottobre 2011, 09:49:03 CEST »
0
Il mi problema e appunto il come settare la nuova posizione in onAnimationEnd.......

Offline F4L|{0

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Play Store ID:
    Jesi
  • Sistema operativo:
    Windows XP + ubuntu
Re:animazioni di bottoni
« Risposta #3 il: 22 Ottobre 2011, 13:42:04 CEST »
0
uppino....non riesco proprio a risolvere il problema  :'(

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:animazioni di bottoni
« Risposta #4 il: 22 Ottobre 2011, 18:36:36 CEST »
0
Che strano comportamento!
Io proverei a vedere se c'è qualche problema nella "memorizzazione" della posizione del testButton usando:
Codice (Java): [Seleziona]
Log.i("mmm","posizione lato superiore "+ testButton.getTop() +" lato sinistro  "+testbutton.getLeft()) e lo inserirei sia nell'onAnimationStart che nell'onAnimationEnd del listener dell'animazione.

Offline F4L|{0

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Play Store ID:
    Jesi
  • Sistema operativo:
    Windows XP + ubuntu
Re:animazioni di bottoni
« Risposta #5 il: 23 Ottobre 2011, 10:50:16 CEST »
0
sembra che la posizione sia identica sia prima che dopo l'animazione

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:animazioni di bottoni
« Risposta #6 il: 30 Ottobre 2011, 13:47:20 CET »
0
Per caso stavo dando un'occhiata qui: Animation | Android Developers.

Effettivamente il comportamento è corretto:
Citazione
Another disadvantage of the view animation system is that it only modified where the View was drawn, and not the actual View itself. For instance, if you animated a button to move across the screen, the button draws correctly, but the actual location where you can click the button does not change, so you have to implement your own logic to handle this.

Quindi purtroppo dovrai gestire tu il click e la relativa posizione.  ;-)

Offline F4L|{0

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Play Store ID:
    Jesi
  • Sistema operativo:
    Windows XP + ubuntu
Re:animazioni di bottoni
« Risposta #7 il: 31 Ottobre 2011, 11:12:06 CET »
+1
credo d'aver risolto il problema.
questa è la soluzione che ho usato e per ora sembra funzionare:

Codice: [Seleziona]
                      public void onAnimationEnd(Animation anim) {
                              button.setVisibility(View.INVISIBLE);
                              setViewPos((View)button, anim, anim.getStartTime() + anim.getDuration());
                              button.setEnabled(true);}});

Codice: [Seleziona]
  private void setViewPos(View view, Animation anim, long time)
  {
          Transformation outTransformation = new Transformation();
          anim.getTransformation(time, outTransformation);       
          float[] values = new float[9];
          outTransformation.getMatrix().getValues(values);
          final float x = values[Matrix.MTRANS_X];
          final float y = values[Matrix.MTRANS_Y];
          view.layout((int)x, (int)y, (int)x + view.getWidth(), (int)y + view.getHeight());
          view.invalidate();
          view.setVisibility(View.VISIBLE);
  }

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:animazioni di bottoni
« Risposta #8 il: 31 Ottobre 2011, 11:17:35 CET »
0
Complimenti! Credo mi tornerà utile prima o poi!