J'ai écrit un code qui peut changer l’image d’arrière-plan de manière aléatoire toutes les 5 secondes. Je souhaite maintenant utiliser l’animation en fondu pour modifier l’image d’arrière-plan, mais je ne sais pas comment utiliser cette animation.
Ceci est une ma source:
void handlechange() {
Handler hand = new Handler();
hand.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// change image here
change();
}
private void change() {
// TODO Auto-generated method stub
Random Rand = new Random();
int index = Rand.nextInt(image_rundow.length);
mapimg.setBackgroundResource(image_rundow[index]);
handlechange();
}
}, 4000);
}
Pour le moment, tout va bien. Je peux changer l’image d’arrière-plan de manière aléatoire, mais je ne sais pas comment utiliser le fondu en animation.
Si quelqu'un connaît la solution, aidez-moi s'il vous plaît, merci.
Vous devez appeler ces codes.
Tout d’abord, vous devez créer deux fichiers xml pour une animation de fondu en avant et arrière comme celle-ci.
fade_in.xml
<?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:fillAfter="true"
Android:duration="2000"
/>
</set>
fade_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<alpha
Android:fromAlpha="1.0"
Android:toAlpha="0.0"
Android:fillAfter="true"
Android:duration="2000"
/>
</set>
Deuxièmement, vous devez exécuter une animation de imageView comme ci-dessous et vous devez également configurer AnimationListener pour modifier le fondu à la fin du fondu.
Animation fadeIn = AnimationUtils.loadAnimation(YourActivity.this, R.anim.fade_in);
imageView.startAnimation(fadeIn);
fadeIn.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
Animation fadeOut = AnimationUtils.loadAnimation(YourActivity.this, R.anim.fade_out);
imageView.startAnimation(fadeOut);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
Pour une animation en fondu, créez un nouveau dossier nommé 'anim' dans votre dossier de ressources et créez-le dans fade_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<alpha
Android:duration="@Android:integer/config_mediumAnimTime"
Android:fromAlpha="0.0"
Android:interpolator="@Android:anim/decelerate_interpolator"
Android:toAlpha="1.0" />
</set>
maintenant pour lancer cette animation sur votre imageview, utilisez le code suivant dans votre activité
Animation anim = AnimationUtils.loadAnimation(YourActivity.this, R.anim.fade_in);
imageView.setAnimation(anim);
anim.start();
pour une animation en fondu, il suffit d'échanger les valeurs d'Android: fromAlpha et Android: toAlpha
J'espère que cela t'aides.
Vous pouvez utiliser relativeLayout et ajouter une couche de vue d'arrière-plan définissant à la fois la hauteur et la largeur match_parent. Tous les autres éléments de l'interface utilisateur doivent figurer au-dessus de cette vue. Dans votre code Définir les animations fadeOut et fadeIn. Trouvez cette vue en arrière-plan par id, puis faites ceci:
xxxBackground.startAnimation(fadeOut);
xxxBackground.setBackgroundResource(R.drawable.your_random_pic);
xxxBackground.startAnimation(fadeIn);
Vous pouvez utiliser un interpolateur pour ajuster la performance.
Vous avez besoin d'AnimationDrawable avec animation.
Première étape AnimationDrawable
-Créer un fichier /res/anim/anim_Android.xml
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:Android="http://schemas.Android.com/apk/res/Android"android:oneshot="false">
<item Android:drawable="@drawable/Android_1"
Android:duration="100"/>
<item Android:drawable="@drawable/Android_2"
Android:duration="100"/>
<item Android:drawable="@drawable/Android_3"
Android:duration="100"/>
<item Android:drawable="@drawable/Android_4"
Android:duration="100"/>
<item Android:drawable="@drawable/Android_5"
Android:duration="100"/>
<item Android:drawable="@drawable/Android_6"
Android:duration="100"/>
<item Android:drawable="@drawable/Android_7"
Android:duration="100"/>
</animation-list>
-Ajouter un ImageView avec Android: src = "@ anim/anim_Android".
<ImageView
Android:id="@+id/myanimation"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@anim/anim_Android" />
Deuxième étape
-Dans votre activité, créez AnimationDrawable et Animation
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable();
animationDrawable.setOneShot(true);
animationDrawable.start();
Animation animation = AnimationUtils.loadAnimation(YourActivity.this, Android.R.anim.fade_in);
imageView.setAnimation(animation);
animation.start();
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
Animation fadeOut = AnimationUtils.loadAnimation(YourActivity.this, Android.R.anim.fade_out);
imageView.startAnimation(fadeOut);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
vous n'avez pas besoin de Handler.
Réponse de kimkevin anime une View
(que ce soit une ImageView
, TextView
etc.) et non un arrière-plan de View
. Ce qui signifie que si vous souhaitez simplement mettre en surbrillance une variable View
, vous devrez ajouter une autre variable View
derrière celle-ci (appelons-la backgroundView) et animer cette image.
Utilisez le code suivant pour animer l'arrière-plan d'une vue
val startColor = view.solidColor
val endColor = ContextCompat.getColor(context, R.color.your_color)
val colorAnim = ObjectAnimator.ofInt(view, "backgroundColor", startColor, endColor, startColor)
colorAnim.duration = 2000
colorAnim.setEvaluator(ArgbEvaluator())
colorAnim.start()