Autore Topic: inserire un layout(o view) con animazione su click di un pulsante  (Letto 898 volte)

Offline A2PLab

  • Nuovo arrivato
  • *
  • Post: 37
  • [Close The World - txeN ehT nepO]
  • Respect: +1
    • Google+
    • http://it.linkedin.com/in/giuseppemastroeni
    • a2plab
    • a2plab
    • Mostra profilo
    • A2PLab
  • Dispositivo Android:
    HTC Desire, Acer Iconia Tab a500
  • Sistema operativo:
    Ubuntu 11.04
Ciao ragazzi,
Sto sviluppando una applicazione che deve avere dei menu e delle view che devono apparire con una animazione su click di un pulsante.
La mia applicazione comprende una mapview e una sidebar, al click di un pulsante nella sidebar devono apparire/scomparire con un effetto translate, da sopra o di lato altri layout con altri controlli che già ho preparato.

Ho visto che ci sono molte tecniche per fare questo e ho visto anche i demo presenti nelle sdk ma non ho ancora capito quale è il modo migliore e funzionante per farlo.

La prima cosa che ho provato è stata quella di inserire una viewstub nel mio layout principale e al click del pulsante fare l'inflate.
Oppure utilizzando viewgroup e aggiungendo a quest'ultimo un child(che è il mio layout da far apparire).

Non ha capito la differenza di utilizzo tra le classi LayoutTransition e LayoutAnimationController e quindi quale usare e se mi conviene usarli.

Per fare un esempio di funzionamento, se conoscete Go Launcher,  vorrei ottenere l'effetto che si ha quando clicco su l'icona di una cartella e dall'alto scende il layout con le icone dentro la suddetta cartella.

Qualcuno sa darmi qualche consiglio ve ne sarei molto grato, in caso posto il codice che ho scritto.

[Close The World - txeN ehT nepO]

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:inserire un layout(o view) con animazione su click di un pulsante
« Risposta #1 il: 02 Marzo 2012, 17:57:54 CET »
0
Io avevo fatto una cosa del genere:

Codice (Java): [Seleziona]
private void hideContainer() {
    Animation animation = AnimationUtils.loadAnimation(MyActivity.this,
            android.R.anim.slide_out_right);
    animation.setAnimationListener(new AnimationListener() {

        @Override
        public void onAnimationEnd(Animation animation) {
            mContainer.setVisibility(View.GONE);
        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }

        @Override
        public void onAnimationStart(Animation animation) {
        }

    });
    mContainer.setAnimation(animation);
}

private void displayContainer() {
    Animation animation = AnimationUtils.loadAnimation(MyActivity.this,
            android.R.anim.slide_in_left);
    animation.setAnimationListener(new AnimationListener() {

        @Override
        public void onAnimationEnd(Animation animation) {
        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }

        @Override
        public void onAnimationStart(Animation animation) {
            mContainer.setVisibility(View.VISIBLE);
        }

    });
    mContainer.setAnimation(animation);
}

dove mContainer era il LinearLayout da mostrare/nascondere.

Offline A2PLab

  • Nuovo arrivato
  • *
  • Post: 37
  • [Close The World - txeN ehT nepO]
  • Respect: +1
    • Google+
    • http://it.linkedin.com/in/giuseppemastroeni
    • a2plab
    • a2plab
    • Mostra profilo
    • A2PLab
  • Dispositivo Android:
    HTC Desire, Acer Iconia Tab a500
  • Sistema operativo:
    Ubuntu 11.04
Re:inserire un layout(o view) con animazione su click di un pulsante
« Risposta #2 il: 02 Marzo 2012, 18:02:51 CET »
0
Quindi mi consigli di fare un animationlistener?
non è oneroso se ho più di un pannello di questo tipo? Ovviamente mi farei una classe che lo estende e poi applicabile a tutti i miei layout quindi in effetti potrebbe funzionare bene.

Ero interessanto alle classi LayoutTransition e LayoutAnimationController come detto prima, perchè le vedo usate nelle demo api di google e mi sembra che siano la cosa migliore da fare perchè credo create apposta per questo mio problema, solo che non so bene come usarle.

In ogni caso grazie mille dell'idea, proverò come mi hai consigliato.
[Close The World - txeN ehT nepO]

Offline A2PLab

  • Nuovo arrivato
  • *
  • Post: 37
  • [Close The World - txeN ehT nepO]
  • Respect: +1
    • Google+
    • http://it.linkedin.com/in/giuseppemastroeni
    • a2plab
    • a2plab
    • Mostra profilo
    • A2PLab
  • Dispositivo Android:
    HTC Desire, Acer Iconia Tab a500
  • Sistema operativo:
    Ubuntu 11.04
Re:inserire un layout(o view) con animazione su click di un pulsante
« Risposta #3 il: 02 Marzo 2012, 20:37:50 CET »
0
Ho trovato un soluzione che si adatta alle mie esigenze e ho implementato l'interfaccia OnClicklistener e la uso per tutti i bottoni della mia ipotetica barra degli strumenti, in questo modo ho un oggetto listener solo per tutti i bottoni dove mi definisco le animazioni possibili e le applico in base al bottone premuto e al pannello da visualizzare.

il mio listener è questo:

Codice (Java): [Seleziona]
public class HeaderOnClickListener implements OnClickListener {

        private View mDistancePanel;
        private View mWhenPanel;
        private View mLocationPanel;
        private Animation slideDown;
        private Animation slideUp;

        public HeaderOnClickListener(Context context, View panel) {
                super();
//successivamente inizializzerò anche gli altri panel
                this.mDistancePanel = panel;

                slideDown = AnimationUtils.loadAnimation(context, R.anim.slide_down);
                slideUp = AnimationUtils.loadAnimation(context, R.anim.slide_up);
        }

        @Override
        public void onClick(View v) {
                View currentPanel = null;

//in questo momento ho solo un pannello quindi c'è un solo case
                switch (v.getId()) {
                case R.id.distanceButton:
                        currentPanel = mDistancePanel;
                        break;
                }

//avvia l'animazione adatta al pannello selezionato in precedenza
                switch (currentPanel.getVisibility()) {
                case View.GONE:
                        currentPanel.startAnimation(slideDown);
                        currentPanel.setVisibility(View.VISIBLE);
                        break;
                case View.VISIBLE:
                        currentPanel.startAnimation(slideUp);
                        currentPanel.setVisibility(View.GONE);
                        break;
                }

        }
}


Poi ho associato normalmente il listener ad un pulsante nella activity tenendo nascosto il mio layout di default, questo fatto dentro il metodo onCreate().

Codice (Java): [Seleziona]
....
View  distancePanel = (View) findViewById(R.id.includeDistancePanel);
distancePanel.setVisibility(View.GONE);        
this.headerOnClikListener = new HeaderOnClickListener(this, distancePanel);

ImageButton distanceButton = (ImageButton) findViewById(R.id.distanceButton);
distanceButton.setOnClickListener(headerOnClikListener);
....

Fatemi sapere che ne pensate, non sarà il meglio ma credo di aver un pò generalizzato la cosa, utile ai miei scopi, avendo ottenuto quello che volevo.
Si accettano consigli
[Close The World - txeN ehT nepO]