Android coltiva LinearLayout usando l’animazione

Sto cercando di usare l’animazione per far apparire un layout sullo schermo. L’idea è che il layout inizi con l’altezza di 0 e cresca al 100%.

Ho dei veri problemi con questo e ho bisogno di assistenza. Per qualche motivo non viene eseguita alcuna animazione.

Ecco il mio file XML di animazione

    

Il file di layout è molto semplice ed è progettato come segue

      

Anche il mio codice attività è molto semplice

 public class MyActivity extends Activity implements Animation.AnimationListener{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void animate(View view){ LinearLayout dialog = (LinearLayout)findViewById(R.id.dialog); dialog.setVisibility(LinearLayout.VISIBLE); Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim); Log.i("animate","Begin Animation"); animation.reset(); // animation.setFillAfter(true); animation.setAnimationListener(this); dialog.setAnimation(null); Log.i("animate","End Animation"); } @Override public void onAnimationStart(Animation animation) { //To change body of implemented methods use File | Settings | File Templates. } @Override public void onAnimationEnd(Animation animation) { //To change body of implemented methods use File | Settings | File Templates. } @Override public void onAnimationRepeat(Animation animation) { //To change body of implemented methods use File | Settings | File Templates. } } 

Grazie

Ok, l’ho capito.

Layout XML di animazione

 < ?xml version="1.0" encoding="utf-8"?>    

File XML di layout

 < ?xml version="1.0" encoding="utf-8"?>          

e la mia class di attività

 public class MyActivity extends Activity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void animate(View view){ LinearLayout dialog = (LinearLayout)findViewById(R.id.dialog); dialog.setVisibility(LinearLayout.VISIBLE); Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim); animation.setDuration(500); dialog.setAnimation(animation); dialog.animate(); animation.start(); } } 

Il modo più semplice per Android 3.0 e versioni successive è impostare questa proprietà per la vista che si desidera aggiungere child:

android:animateLayoutChanges="true"

Puoi anche creare le tue animazioni:

Se si desidera fornire animazioni di layout personalizzate, creare un object LayoutTransition e fornirlo al layout con il metodo setLayoutTransition ().

Per maggiori informazioni vedi: http://developer.android.com/training/animation/layout.html#activity

Progettare un linearlayout crescente in Android:

Per quelli che usano l’android Mono di Xamarin:

crea una cartella anim sotto risorse.

quindi aggiungi animation.xml nella cartella anim (grow_anim1)

nella class di attività utilizzare in questo modo:

(nel mio caso sto usando Fragment)

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Android.App; using Android.Content; using Android.OS; using Android.Runtime; using Android.Util; using Android.Views; using Android.Widget; using Android.Views.Animations; namespace BehnoudAndroidApp { public class StartPageFragment : Fragment{ public override View OnCreateView(LayoutInflater p0, ViewGroup p1, Bundle p2){ var rootView = p0.Inflate(Resource.Layout.StartPageLayout, p1, false); LinearLayout menu1 = rootView.FindViewById(Resource.Id.linearlayout1); Animation animation1 = AnimationUtils.LoadAnimation(this.Activity, Resource.Animation.grow_anim1); animation1.Duration = 5000; menu1.Click += delegate { menu1.StartAnimation(animation1); }; return rootView; } } } 

l’animazione sembra non essere mai iniziata. prova ad aggiungere: animation.start ()?