J'essaie d'implémenter l'animation d'interpolation "hyperspace" décrite à http://developer.Android.com/guide/topics/resources/animation-resource.html ("Ressources d'animation") - cependant cela ne semble pas fonctionner comme écrit. Lorsque j'exécute l'application, j'obtiens simplement une vue vierge sous la barre de titre de l'application. Qu'est-ce que je fais mal?
Par l'exemple, voici mon code. J'ai créé res/anim/hyperspace_jump.xml:
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shareInterpolator="false">
<scale
Android:interpolator="@Android:anim/accelerate_decelerate_interpolator"
Android:fromXScale="1.0"
Android:toXScale="1.4"
Android:fromYScale="1.0"
Android:toYScale="0.6"
Android:pivotX="50%"
Android:pivotY="50%"
Android:fillAfter="false"
Android:duration="700" />
<set
Android:interpolator="@Android:anim/accelerate_interpolator"
Android:startOffset="700">
<scale
Android:fromXScale="1.4"
Android:toXScale="0.0"
Android:fromYScale="0.6"
Android:toYScale="0.0"
Android:pivotX="50%"
Android:pivotY="50%"
Android:duration="400" />
<rotate
Android:fromDegrees="0"
Android:toDegrees="-45"
Android:toYScale="0.0"
Android:pivotX="50%"
Android:pivotY="50%"
Android:duration="400" />
</set>
</set>
J'ai également créé un layout/main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
>
<TextView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="@string/hello"
/>
<ImageView Android:id="@+id/ImageView01" Android:layout_width="wrap_content" Android:layout_height="wrap_content"></ImageView>
</LinearLayout>
Enfin j'ai une activité:
package com.tomoreilly.geology;
import Android.app.Activity;
import Android.os.Bundle;
import Android.view.animation.Animation;
import Android.view.animation.AnimationUtils;
import Android.widget.ImageView;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView image = (ImageView) findViewById(R.id.ImageView01);
Animation hyperspaceJump =
AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);
}
}
Pourtant, je ne vois aucune animation lorsque je lance l'application. Suis-je en train de manquer des détails qui ne sont pas traités dans l'exemple "Ressources d'animation"?
Merci Tom
Pour ajouter une réponse différente, vous pouvez également essayer le niversal Tween Engine pour animer vos Android UIs. En effet, votre animation, qui nécessite pas mal de lignes dans son XML format, serait décrit comme ceci:
Timeline.createSequence()
// First, set your pivot (Tween.set() works instantly)
.Push(Tween.set(image, ViewAccessor.PIVOT_XY).target(0.5f, 0.5f))
// Then, animate your scale and rotation as you want
.Push(Tween.to(image, ViewAccessor.SCALE_XY, 0.7f).target(1.4f, 0.6f))
.beginParallel()
.Push(Tween.to(image, ViewAccessor.SCALE_XY, 0.4f).target(0, 0))
.Push(Tween.to(image, ViewAccessor.ROTATION, 0.4f).target(-45))
.end()
// Finally, start the animation!
.start();
Il peut être plus lisible lorsque vous avez un grand nombre d'actions à séquencer. Le moteur est fortement optimisé pour Android, et en particulier pour les jeux, et n'alloue rien, pour fournir les meilleures performances.
Il est entièrement open-source, fortement documenté et publié avec une licence Apache-2.
Vous pouvez essayer démo Android si vous voulez :)
Votre imageview doit avoir une source définie dans le xml ou votre activité.
xml:
<ImageView Android:id="@+id/ImageView01"
Android:src="@drawable/someimage"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
</ImageView>
activité:
ImageView image = (ImageView) findViewById(R.id.ImageView01);
image.setImageResource(R.drawable.some_image);