web-dev-qa-db-fra.com

Exemple d'animation d'interpolation simple

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

20
Tomasso

enter image description here

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 :)

11
Aurelien Ribon

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);
5
swlkr