Partage
  • Partager sur Facebook
  • Partager sur Twitter

Android (API 7) - Animation : onAnimationRepeat

ne fonctionne pas

Sujet résolu
    1 décembre 2012 à 22:59:57

    Bonjour,

    J'ai un problème sur un programme Android, je souhaite modifier une image pendant que l'animation se répète, mais la fonction permettant de le faire (onAnimationRepeat de la classe AnimationListener) n'est jamais appelé.
    J'imagine que les développeurs d'Android ne seraient pas passé à côté de quelque chose d'aussi gros et qu'il y a donc bien une méthode.

    C'est dommage : la partie du tuto Android qui concerne cela s'arrête juste avant : http://www.siteduzero.com/tutoriel-3-6 [...] imations.html
    Une fois la solution, peut-être qu'il serait bien d'en parler ?


    Voici un code minimal qui permet de tester cela :

    - Créer un nouveau projet "test" (Android 2.1, API 7) (j'ai mis com.test.test en nom de package)
    - Créer un dossier "anim" dans le dossier "res", puis créer un nouveau fichier "fade_in.xml" qui contiendra ces lignes :

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    	<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
    	    android:interpolator="@android:anim/accelerate_interpolator"
    	    android:duration="1000"
    	    android:repeatCount="3"/>
    </set>
    


    Voici le code de l'activité :


    package com.test.test;
    
    import android.app.Activity;
    import android.graphics.Color;
    import android.graphics.PorterDuff.Mode;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.animation.Animation;
    import android.view.animation.AnimationUtils;
    import android.view.animation.Animation.AnimationListener;
    import android.widget.Button;
    import android.widget.ImageView;
    
    public class TestActivity extends Activity {
        
    	Button button = null;
    	ImageView image = null;
    	
    	Animation animation = null;
    	
    	
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            button = (Button)findViewById(R.id.button1);
            image = (ImageView)findViewById(R.id.imageView1);
            
            animation = AnimationUtils.loadAnimation(this, R.anim.fade_in);
            animation.setAnimationListener(new AnimationListener() {        	
            	
            	int repeatNumber = 0;
            	
    			@Override
    			public void onAnimationStart(Animation animation) {Log.i("start", "start");}
    			
    			@Override
    			public void onAnimationEnd(Animation animation) {Log.i("end", "end");}
    
    			@Override
    			public void onAnimationRepeat(Animation animation) {
    				repeatNumber++;
    				Log.i("repeat", String.valueOf(repeatNumber));
    				switch(repeatNumber)
    				{
    				case 1:image.setColorFilter(Color.RED, Mode.MULTIPLY);break;
    				case 2:image.setColorFilter(Color.BLUE, Mode.MULTIPLY);break;
    				case 3:image.setColorFilter(Color.YELLOW, Mode.MULTIPLY);break;
    				default:break;
    				}
    			}
    		});
            
            button.setOnClickListener(new OnClickListener() {
    			@Override
    			public void onClick(View v) {image.startAnimation(animation);}
    		});
            
        }
    }
    


    et au cas où, le code du layout :

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button" />
    
        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher" />
    
    </LinearLayout>
    


    A chaque fois que l'animation se répète la couleur du logo devrait changer (et un log devrait apparaitre dans la console) mais cette fonction n'est jamais appelé.

    Pouvez-vous m'aider ?

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter

    Android (API 7) - Animation : onAnimationRepeat

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown