Android – widget per fisarmonica

Sto cercando il modo migliore per creare un widget in stile Accordion come in questa pagina . C’è un modo per ottenere lo stesso effetto usando il toolkit standard di Android o devo creare un widget personalizzato? Se è così – quale raccomanderesti di estendere, se necessario?

Ho spinto il progetto Android per fisarmonica a github. Lo usiamo per i nostri clienti, testati su 2.2, 2.3.x, 3.2 e 4.0.3. Funziona abbastanza bene per noi.

Andando ad aggiungere animazioni su fold / unfold nel passaggio successivo.

Ecco uno screenshot di piccole dimensioni:

inserisci la descrizione dell'immagine qui

E nel caso ti stia ancora chiedendo – questo può essere fatto praticamente con una coppia di pulsanti / layout impilati all’interno del layout lineare. Segue lo pseudo codice

                 

Un’altra cosa da provare è impilare ExpandableListView-s uno sopra l’altro

Devo rischiare e dire che la risposta di @Bostone è la più appropriata. Ti darò il mio codice qui sotto in modo che tu possa vedere. Grazie per il GitHub Maciej Łopaciński, ma come @SudoPlz ha detto nei commenti, non c’è alcuna documentazione. Non sapevo da dove cominciare. Cerco di farlo con Eclipse e Android Studio e in nessuno dei due potrei eseguire il progetto per iniziare a capire come funziona. Inoltre, l’ultimo impegno in quel progetto è stato circa 1 anno fa, il che mi fa temere molto che se qualcosa andasse storto sarei bloccato in un vicolo cieco. Quindi, senza ulteriori ritardi, ecco la mia soluzione basata su @Bostone:

1.- Prima devi creare un pulsante e un layout nidificati in una ScrollView:

       

2.- Dopo di che vai al tuo JAVA corrispondente, trova il pulsante e imposta onClickListener, all’interno di onClickListener troverai il layout.

 Button findMagicBtn = (Button) findViewById(R.id.magic_btn); findMagicBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); 

3.- Quindi ora all’interno di onClickListener troveremo il layout. Come puoi vedere nel primo passaggio, il layout è impostato di default su GONE , ma ora dobbiamo impostarlo su visibile. Il problema è, come posso farlo sparire di nuovo e viceversa? Quindi aggiungeremo una condizione per ottenere la visibilità del layout e in base a ciò sarà nascosta o mostrata:

 Button findMagicBtn = (Button) findViewById(R.id.magic_btn); findMagicBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { LinearLayout findMagicLl = (LinearLayout) findViewById(R.id.magic_layout); if (findMagicLl.getVisibility() == View.VISIBLE) { findMagicLl.setVisibility(View.GONE); } else { findMagicLl.setVisibility(View.VISIBLE); } } }); 

Questo può essere messo l’un l’altro quante volte vuoi.

Quindi ora se vuoi veramente far sembrare una fisarmonica puoi fare il magnaccia al bottone. Puoi mettere una freccia a destra, usando l’esempio:

 findMagicBtn.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.right_arrow, 0); 

Dovresti farlo all’interno di onClickListener e usare la condizione per cambiare la direzione della freccia, cambiando il drawable (se è andato giù e freccia giù, e se è visibile una freccia su).

Inoltre, puoi renderlo più naturale aggiungendo un’animazione, come questa:

 ScaleAnimation animation = new ScaleAnimation(1f, 1f, 1f, 0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f); animation.setDuration(180); animation.setFillAfter(true); findMagicLl.startAnimation(animation); 

Dovrai considerare che l’animazione sopra deve essere fatta mentre la vista è visibile. Si prega di essere consapevole del fatto che setFillAfter(true) , cambierà la dimensione del contenitore in modo permanente, quindi se lo fai, forse non vuoi più usare VIEW.GONE . Questa domanda ha una spiegazione meravigliosa sull’animazione in scala