J'essaie d'utiliser l'animation pour faire apparaître une mise en page à l'écran. L'idée est que la mise en page commencera par une hauteur de 0 et atteindra 100%.
J'ai de réels problèmes avec cela et j'ai besoin d'aide. Pour une raison quelconque, aucune animation n'est effectuée.
Voici mon fichier XML d'animation
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<scale
Android:interpolator="@Android:anim/accelerate_decelerate_interpolator"
Android:fromXScale="0.0"
Android:toXScale="1"
Android:fromYScale="1.0"
Android:toYScale="1.0"
Android:fillAfter="false"
/>
</set>
Le fichier de mise en page est très basique et est conçu comme suit
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" xmlns:Android="http://schemas.Android.com/apk/res/Android">
<LinearLayout
Android:id="@+id/dialog"
Android:layout_width="wrap_content"
Android:layout_height="200dp"
Android:layout_centerHorizontal="true"
Android:orientation="vertical"
Android:layout_centerVertical="true"
Android:background="@drawable/border">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
Android:text="Phone"
Android:id="@+id/textView"/>
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
Android:text="Address"
Android:id="@+id/textView1"/>
<Button Android:id="@+id/btn1"
Android:layout_width="200dp"
Android:layout_height="wrap_content"
Android:text="Action 1"
/>
<Button Android:id="@+id/btn2"
Android:layout_width="200dp"
Android:layout_height="wrap_content"
Android:text="Action 2"
/>
</LinearLayout>
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Animate"
Android:id="@+id/btnAnimate" Android:layout_alignParentLeft="true" Android:layout_alignParentTop="true"
Android:onClick="animate"/>
</RelativeLayout>
Mon code d'activité est également très basique
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.
}
}
Je vous remercie
Ok, je l'ai compris.
Disposition XML d'animation
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:fillEnabled="true"
Android:fillAfter="true">
<scale
Android:interpolator="@Android:anim/accelerate_decelerate_interpolator"
Android:fromXScale="1.0"
Android:toXScale="1.0"
Android:fromYScale="0.0"
Android:toYScale="1.0"
Android:fillAfter="false"
/>
</set>
Fichier XML de mise en page
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" xmlns:Android="http://schemas.Android.com/apk/res/Android">
<LinearLayout
Android:id="@+id/dialog"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true"
Android:orientation="vertical"
Android:layout_centerVertical="true"
Android:visibility="invisible"
Android:background="@drawable/border">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
Android:text="Phone"
Android:id="@+id/textView"/>
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
Android:text="Address"
Android:id="@+id/textView1"/>
<Button Android:id="@+id/btn1"
Android:layout_width="200dp"
Android:layout_height="wrap_content"
Android:text="Action 1"
/>
<Button Android:id="@+id/btn2"
Android:layout_width="200dp"
Android:layout_height="wrap_content"
Android:text="Action 2"
/>
</LinearLayout>
<Button
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Animate"
Android:id="@+id/btnAnimate" Android:layout_alignParentLeft="true" Android:layout_alignParentTop="true"
Android:onClick="animate"/>
</RelativeLayout>
et ma classe d'activité
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();
}
}
Le moyen le plus simple pour Android 3.0 et supérieur est de définir cette propriété pour la vue à laquelle vous souhaitez ajouter des enfants:
Android:animateLayoutChanges="true"
Vous pouvez également créer vos propres animations:
Si vous souhaitez fournir des animations de disposition personnalisées, créez un objet LayoutTransition et fournissez-le à la disposition avec la méthode setLayoutTransition ().
Pour plus d'informations, voir: http://developer.Android.com/training/animation/layout.html#activity
Concevoir une disposition linéaire croissante dans Android:
Pour ceux qui utilisent Mono Android de Xamarin:
créer un dossier anim
sous les ressources.
puis ajouter animation.xml
dans le dossier anim
(grow_anim1)
dans la classe d'activité, utilisez cette méthode:
(dans mon cas, j'utilise 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<LinearLayout>(Resource.Id.linearlayout1);
Animation animation1 = AnimationUtils.LoadAnimation(this.Activity, Resource.Animation.grow_anim1);
animation1.Duration = 5000;
menu1.Click += delegate { menu1.StartAnimation(animation1); };
return rootView;
}
}
}
Il semble que l'animation ne démarre jamais. essayez d'ajouter:
animation.start()