Cyril Mottier

“It’s the little details that are vital. Little things make big things happen.” – John Wooden

Testeur d'Interpolators

Je viens de terminer une petite application permettant de tester les différents Interpolators fournis avec Android. Certains doivent se demander ce qu'est un Interpolator. L'interface Interpolator définit en réalité une fonction définie sur [0;1] qui donne une valeur en général comprise, elle aussi entre 0 et 1 (mais cela n'est pas obligatoire). Imaginons que nous souhaitions créer une animation qui déplace simplement un objet d'une position (x1,y1) à une position (x2,y2). Le principe même d'une animation consiste à placer l'objet sur la droite séparant (x1,y1) et (x2,y2). C'est exactement ici que l'Interpolator agit : il définit la position de l'objet sur cette droite en fonction du temps.

Le squelette donné ci-dessous est celui de l'interface Interpolator. On y retrouve une seule est unique méthode nommée getInterpolation(float).

Interpolator.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* An interpolator defines the rate of change of an animation. This allows
* the basic animation effects (alpha, scale, translate, rotate) to be 
* accelerated, decelerated, repeated, etc.
*/
public interface Interpolator {

    /**
     * Maps a point on the timeline to a multiplier to be applied to the
     * transformations of an animation.
     * 
     * @param input A value between 0 and 1.0 indicating our current point
     *        in the animation where 0 represents the start and 1.0 represents
     *        the end
     * @return The interpolation value. This value can be more than 1.0 for
     *         Interpolators which overshoot their targets, or less than 0 for
     *         Interpolators that undershoot their targets.
     */
     float getInterpolation(float input);

}

Lorsqu'une animation est en cours, le framework fait des appels successifs à la méthode getInterpolation(float input) afin de déterminer la position de l'objet sur la droite. La valeur input correspond en réalité à l'avancement de l'animation (le temps) : 0 correspond au début de l'animation alors que 1 définit la fin de l'animation.

L'application “Ball Animation” que je viens de créer affiche simplement une boule qui se déplace à la position cliquée par l'utilisateur. Il est également possible de changer l'Interpolator et le temps de l'animation utilisés pour animer la boule. Les captures d'écran ci-dessous donnent un aperçu rapide de ce à quoi ressemble l'application.

Pour permettre à chacun d'accéder à mes applications, j'ai créé un projet sur Google Code. Je mettrais sur ce projet l'ensemble des applications que je ferais. La page d'accueil de ce projet est accessible à l'adresse suivante : http://code.google.com/p/cyril-android-apps/

Pour les intéressés, il est également possible d'accéder aux codes source des applications à l'aide du gestionnaire de version Subversion. Les sources de “Ball Animation” sont par exemple accessibles à l'adresse suivante :

http://cyril-android-apps.googlecode.com/svn/trunk/BallAnimation