Android aggiungendo semplici animazioni mentre la visibilità (view.Gone)

Ho disegnato un layout semplice. Ho terminato il progetto senza animation, ma adesso vorrei aggiungere animazioni quando l'evento di clickview textview e non so come utilizzarlo. Il mio disegno xml sembra buono o no? Tutti i suggerimenti sarebbero apprezzati.

Il mio XML

  • Android Avvio di un selezionatore di applicazioni con un elenco appropriato di applicazioni
  • confrontare matrici di due lunghezze diverse
  • prova l'localhost in emulatore android
  • Facebook come button in WebView con SDK
  • Come cambiare il nome e l'icona dell'applicazione Android in fase di runtime?
  • impostare le informazioni di visualizzazione di InfoWindowAdapter solo per il primo marcatore cliccato
  • <?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:longClickable="false" android:orientation="vertical" android:weightSum="16" > <LinearLayout android:layout_width="fill_parent" android:layout_height="0dp" android:orientation="vertical" android:background="#00DDA0" android:layout_weight="3" > </LinearLayout> <TextView android:id="@+id/Information1" android:layout_width="match_parent" android:layout_height="1dp" android:text="Child Information" android:background="#0390BE" android:layout_weight="0.75" android:textColor="#FFFFFF" android:layout_gravity="center|fill_horizontal"/> <LinearLayout android:id="@+id/layout1" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="8.5" android:background="#BBBBBB" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="match_parent" android:text="TextView" /> </LinearLayout> <TextView android:id="@+id/Information2" android:layout_width="match_parent" android:layout_height="0dp" android:text="Parent Information" android:background="#0390BE" android:layout_weight="0.75" android:textColor="#FFFFFF" android:layout_gravity="center|fill_horizontal"/> <LinearLayout android:id="@+id/layout2" android:layout_width="fill_parent" android:layout_height="0dp" android:orientation="vertical" android:background="#BBBBBB" android:layout_weight="8.5" > <TextView android:id="@+id/textView2" android:layout_width="match_parent" android:layout_height="match_parent" android:text="TextView" /> </LinearLayout> <TextView android:id="@+id/Information3" android:layout_width="match_parent" android:layout_height="0dp" android:text="Siblings" android:background="#0390BE" android:layout_weight="0.75" android:textColor="#FFFFFF" android:layout_gravity="center|fill_horizontal"/> <LinearLayout android:id="@+id/layout3" android:layout_width="fill_parent" android:layout_height="0dp" android:orientation="vertical" android:background="#BBBBBB" android:layout_weight="8.5" > <TextView android:id="@+id/textView3" android:layout_width="match_parent" android:layout_height="match_parent" android:text="TextView" /> </LinearLayout> <TextView android:id="@+id/Information4" android:layout_width="match_parent" android:layout_height="0dp" android:text="Teacher Information" android:background="#0390BE" android:layout_weight="0.75" android:textColor="#FFFFFF" android:layout_gravity="center|fill_horizontal"/> <LinearLayout android:id="@+id/layout4" android:layout_width="fill_parent" android:layout_height="0dp" android:orientation="vertical" android:background="#BBBBBB" android:layout_weight="8.5" > <TextView android:id="@+id/textView4" android:layout_width="match_parent" android:layout_height="match_parent" android:text="TextView" /> </LinearLayout> <TextView android:id="@+id/Information5" android:layout_width="match_parent" android:layout_height="0dp" android:text="Grade Information" android:background="#0390BE" android:layout_weight="0.75" android:textColor="#FFFFFF" android:layout_gravity="center|fill_horizontal"/> <LinearLayout android:id="@+id/layout5" android:layout_width="fill_parent" android:layout_height="0dp" android:orientation="vertical" android:background="#BBBBBB" android:layout_weight="8.5" > <TextView android:id="@+id/textView5" android:layout_width="match_parent" android:layout_height="match_parent" android:text="TextView" /> </LinearLayout> <TextView android:id="@+id/Information6" android:layout_width="match_parent" android:layout_height="0dp" android:text="Health Information" android:background="#0390BE" android:layout_weight="0.75" android:textColor="#FFFFFF" android:layout_gravity="center|fill_horizontal"/> <LinearLayout android:id="@+id/layout6" android:layout_width="fill_parent" android:layout_height="0dp" android:orientation="vertical" android:background="#BBBBBB" android:layout_weight="8.5" > <TextView android:id="@+id/textView5" android:layout_width="match_parent" android:layout_height="match_parent" android:text="TextView" android:layout_weight="8.5" /> </LinearLayout> </LinearLayout> 

    La mia java

     public class Certify_Info extends Activity { private static TextView tv2,tv3,tv5,tv6,tv4,tv1; private static LinearLayout l1,l2,l3,l4,l5,l6; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_certify__info); tv1=(TextView) findViewById(R.id.Information1); tv2=(TextView) findViewById(R.id.Information2); tv3=(TextView) findViewById(R.id.Information3); tv4=(TextView) findViewById(R.id.Information4); tv5=(TextView) findViewById(R.id.Information5); tv6=(TextView) findViewById(R.id.Information6); l1=(LinearLayout) findViewById(R.id.layout1); l2=(LinearLayout) findViewById(R.id.layout2); l3=(LinearLayout) findViewById(R.id.layout3); l4=(LinearLayout) findViewById(R.id.layout4); l5=(LinearLayout) findViewById(R.id.layout5); l6=(LinearLayout) findViewById(R.id.layout6); l2.setVisibility(View.GONE); l3.setVisibility(View.GONE); l4.setVisibility(View.GONE); l5.setVisibility(View.GONE); l6.setVisibility(View.GONE); tv1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub l2.setVisibility(View.GONE); l3.setVisibility(View.GONE); l4.setVisibility(View.GONE); l5.setVisibility(View.GONE); l6.setVisibility(View.GONE); l1.setVisibility(View.VISIBLE); } }); tv2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub l1.setVisibility(View.GONE); l3.setVisibility(View.GONE); l4.setVisibility(View.GONE); l5.setVisibility(View.GONE); l6.setVisibility(View.GONE); l2.setVisibility(View.VISIBLE); } }); tv3.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub l1.setVisibility(View.GONE); l2.setVisibility(View.GONE); l4.setVisibility(View.GONE); l5.setVisibility(View.GONE); l6.setVisibility(View.GONE); l3.setVisibility(View.VISIBLE); } }); tv4.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub l1.setVisibility(View.GONE); l2.setVisibility(View.GONE); l3.setVisibility(View.GONE); l4.setVisibility(View.GONE); l5.setVisibility(View.GONE); l6.setVisibility(View.GONE); l4.setVisibility(View.VISIBLE); } }); tv5.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub l1.setVisibility(View.GONE); l2.setVisibility(View.GONE); l3.setVisibility(View.GONE); l4.setVisibility(View.GONE); l6.setVisibility(View.GONE); l5.setVisibility(View.VISIBLE); } }); tv6.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub l1.setVisibility(View.GONE); l2.setVisibility(View.GONE); l3.setVisibility(View.GONE); l4.setVisibility(View.GONE); l5.setVisibility(View.GONE); l6.setVisibility(View.VISIBLE); } }); } } 

  • Come posso aggiungere immagini sovrapposte o text in cima a video in Android?
  • CardView visualizza gli artefatti quando RotationY> 60
  • Android 5.0 android: l'elevazione funziona per la vista, ma non il button?
  • Dialogo di progresso personalizzato di centraggio
  • Android: Ho perso il mio store di chiavi android, cosa devo fare?
  • Limita i luoghi decimali in Android EditText
  • 3 Solutions collect form web for “Android aggiungendo semplici animazioni mentre la visibilità (view.Gone)”

    È ansible fare due cose per aggiungere animazioni, innanzitutto è ansible lasciare che Android animare le modifiche di layout per te. In questo modo each volta che si cambia qualcosa nel layout come cambiare visibilità vista o visualizzare posizioni android creerà automaticamente fade / transizioni animazioni. Per utilizzare quel set

     android:animateLayoutChanges="true" 

    sul nodo radice nel layout.

    La seconda opzione sarebbe quella di aggiungere manualmente le animazioni. Per questo vi suggerisco di utilizzare la nuova API per l'animation introdotta in Android 3.0 (Honeycomb). Posso darle alcuni esempi:

    Questo sfuma una View :

     view.animate().alpha(0.0f); 

    Questo lo sfuma in:

     view.animate().alpha(1.0f); 

    Questo sposta una View verso il basso per la sua altezza:

     view.animate().translationY(view.getHeight()); 

    Questo restituisce la View alla posizione iniziale dopo essere stata spostata altrove:

     view.animate().translationY(0); 

    È anche ansible utilizzare setDuration() per impostare la durata dell'animation. Ad esempio, questa function si distriggers di una View per un periodo di 2 secondi:

     view.animate().alpha(0.0f).setDuration(2000); 

    E puoi combinare tante animazioni come ti piace, per esempio questo sfuma una View e lo sposta allo stesso tempo in un tempo di 0,3 secondi:

     view.animate() .translationY(view.getHeight()) .alpha(0.0f) .setDuration(300); 

    E puoi anche assegnare un ascoltatore all'animation e reactjs a tutti i tipi di events. Come quando l'animation inizia, quando termina o ripete ecc. Usando la class astratta AnimatorListenerAdapter non è necessario implementare tutte le richieste di AnimatorListener contemporaneamente ma solo quelle necessarie. Questo rende il codice leggibile. Ad esempio il seguente codice sbiadisce una View sposta per la sua altezza per un periodo di 0,3 secondi (300 millisecondi) e quando l'animation viene eseguita la visibilità è impostata su View.GONE .

     view.animate() .translationY(view.getHeight()) .alpha(0.0f) .setDuration(300) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); view.setVisibility(View.GONE); } }); 

    Controlla questo collegamento. Che consentirà animazioni come le animazioni L2R, R2L, T2B, B2T.

    Questo codice mostra l'animation da sinistra a destra

     TranslateAnimation animate = new TranslateAnimation(0,view.getWidth(),0,0); animate.setDuration(500); animate.setFillAfter(true); view.startAnimation(animate); view.setVisibility(View.GONE); 

    se vuoi farlo da R2L poi usare

     TranslateAnimation animate = new TranslateAnimation(0,-view.getWidth(),0,0); 

    per cima a fondo come

     TranslateAnimation animate = new TranslateAnimation(0,0,0,view.getHeight()); 

    e viceversa ..

    In base alla risposta di @Xaver Kapeller ho capito un modo per creare un'animation di scorrimento quando nuove visualizzazioni appaiono sullo schermo (e anche l'animation per nasconderle).

    Va da questo stato:

    • Pulsante
    • Ultimo button

    a

    • Pulsante
    • Pulsante 1
    • Pulsante 2
    • Pulsante 3
    • Pulsante 4
    • Ultimo button

    e viceversa.

    Così, quando l'utente fa clic sul primo button, appariranno gli elementi "Button 1", "Button 2", "Button 3" e "Button 4" utilizzando l'animation fade e l'elemento "Last Button" si sposterà verso il basso fino alla fine. L'altezza del layout cambierà anche, consentendo di utilizzare correttamente la visualizzazione di scorrimento.

    Questo è il codice per mostrare elementi con animation:

     private void showElements() { // Precondition if (areElementsVisible()) { Log.w(TAG, "The view is already visible. Nothing to do here"); return; } // Animate the hidden linear layout as visible and set // the alpha as 0.0. Otherwise the animation won't be shown mHiddenLinearLayout.setVisibility(View.VISIBLE); mHiddenLinearLayout.setAlpha(0.0f); mHiddenLinearLayout .animate() .setDuration(ANIMATION_TRANSITION_TIME) .alpha(1.0f) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); updateShowElementsButton(); mHiddenLinearLayout.animate().setListener(null); } }) ; mLastButton .animate() .setDuration(ANIMATION_TRANSITION_TIME) .translationY(mHiddenLinearLayoutHeight); // Update the high of all the elements relativeLayout LayoutParams layoutParams = mAllElementsRelativeLayout.getLayoutParams(); // TODO: Add vertical margins layoutParams.height = mLastButton.getHeight() + mHiddenLinearLayoutHeight; } 

    e questo è il codice per hide gli elementi dell'animation:

     private void hideElements() { // Precondition if (!areElementsVisible()) { Log.w(TAG, "The view is already non-visible. Nothing to do here"); return; } // Animate the hidden linear layout as visible and set mHiddenLinearLayout .animate() .setDuration(ANIMATION_TRANSITION_TIME) .alpha(0.0f) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { Log.v(TAG, "Animation ended. Set the view as gone"); super.onAnimationEnd(animation); mHiddenLinearLayout.setVisibility(View.GONE); // Hack: Remove the listener. So it won't be executed when // any other animation on this view is executed mHiddenLinearLayout.animate().setListener(null); updateShowElementsButton(); } }) ; mLastButton .animate() .setDuration(ANIMATION_TRANSITION_TIME) .translationY(0); // Update the high of all the elements relativeLayout LayoutParams layoutParams = mAllElementsRelativeLayout.getLayoutParams(); // TODO: Add vertical margins layoutParams.height = mLastButton.getHeight(); } 

    Nota: c'è un semplice hack sul metodo per hide l'animation. Nell'elenco di animation mHiddenLinearLayout, ho dovuto rimuovere l'ascoltatore stesso utilizzando:

     mHiddenLinearLayout.animate().setListener(null); 

    Ciò è perché una volta che un ascoltatore di animation è collegato a una vista, la prossima volta in cui viene eseguita un'animation in questa vista, l'ascoltatore verrà eseguito pure. Questo potrebbe essere un bug nell'ascoltatore di animation.

    Il codice sorgente del progetto è su GitHub: https://github.com/jiahaoliuliu/ViewsAnimated

    Buon codice!

    Aggiornamento : Per each ascoltatore collegato alle viste, dovrebbe essere rimosso dopo che l'animation termina. Questo viene fatto usando

     view.animate().setListener(null); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.