J'essaie d'animer un ImageView lorsque l'on clique sur la vue en question.
Plus précisément, je veux que la taille de la ImageView soit plus grande (disons 0,20 plus grande) et qu’elle retrouve immédiatement sa taille initiale.
Jusqu'à présent, j'ai expérimenté ce code sans succès.
// thumbLike is the imageView I would like to animate.
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ScaleAnimation scaleAnim = new ScaleAnimation(1.0f, 2.5f, 1.0f, 2.5f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
scaleAnim.setInterpolator(new LinearInterpolator());
scaleAnim.setDuration(1500);
thumbLike.startAnimation(scaleAnim);
thumbLike.setAnimation(null);
}
});
Quelqu'un peut-il me suggérer une solution possible?
Modifier # 1
Il fonctionne via XML, comme l'a répondu Hardik4560:
// finally i use this code to execute the animation
Animation animationScaleUp = AnimationUtils.loadAnimation(this, R.anim.scale_up);
Animation animationScaleDown = AnimationUtils.loadAnimation(this, R.anim.scale_down);
AnimationSet growShrink = new AnimationSet(true);
growShrink.addAnimation(animationScaleUp);
growShrink.addAnimation(animationScaleDown);
thumbLike.startAnimation(growShrink);
et le XML
SCALE_UP
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:interpolator="@Android:anim/linear_interpolator">
<scale
Android:fromXScale="1.0"
Android:toXScale="1.5"
Android:fromYScale="1.0"
Android:toYScale="1.5"
Android:pivotX="50%"
Android:pivotY="50%"
Android:duration="1000" />
</set>
SCALE_DOWN
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:interpolator="@Android:anim/linear_interpolator">
<scale
Android:fromXScale="1.5"
Android:toXScale="1.0"
Android:fromYScale="1.5"
Android:toYScale="1.0"
Android:pivotX="50%"
Android:pivotY="50%"
Android:duration="1000" />
</set>
ps: c'est gênant, car j'ai déjà accepté une réponse. J'essaie de combiner les réponses de @tharkbad à celles de @ Hardik4560, mais la manière dont elles s'animent n'a pas l'air d'être lisse.
lors de l'animation scale_up, cela ressemble un peu à "passer" à la fin de l'animation et au démarrage immédiat de l'animation scale_down. Je suppose que je dois jouer un peu avec elle.
J'utilise ceci pour obtenir un effet popin popout,
Voyez si cela vous est utile
Sortir.
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:interpolator="@Android:anim/bounce_interpolator" >
<scale
Android:pivotX="50%"
Android:pivotY="50%"
Android:fromXScale="0.5"
Android:fromYScale="0.5"
Android:toXScale="1.0"
Android:toYScale="1.0"
Android:duration="500" />
</set>
Entrer brusquement
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:interpolator="@Android:anim/bounce_interpolator" >
<scale
Android:pivotX="50%"
Android:pivotY="50%"
Android:fromXScale="1.0"
Android:fromYScale="1.0"
Android:toXScale="0.0"
Android:toYScale="0.0"
Android:duration="500" />
</set>
Si vous souhaitez implémenter ceci sans XML, vous pouvez le faire comme suit
final float growTo = 1.2f;
final long duration = 1200;
ScaleAnimation grow = new ScaleAnimation(1, growTo, 1, growTo,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
grow.setDuration(duration / 2);
ScaleAnimation shrink = new ScaleAnimation(growTo, 1, growTo, 1,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
shrink.setDuration(duration / 2);
shrink.setStartOffset(duration / 2);
AnimationSet growAndShrink = new AnimationSet(true);
growAndShrink.setInterpolator(new LinearInterpolator());
growAndShrink.addAnimation(grow);
growAndShrink.addAnimation(shrink);
thumbLike.startAnimation(growAndShrink);
Bien sûr, vous pouvez aussi utiliser NineOldAndroids et utiliser les nouvelles méthodes d’animation.
Je pense que votre erreur d'origine est cette ligne, elle supprime l'animation que vous venez de démarrer de la vue.
thumbLike.setAnimation(null);
J'ai créé la même animation avec Kotlin:
Repo: https://github.com/David-Hackro/Bounce-Animation
Vous devez créer votre élément et étendre n'importe quoi (ImageView, Button, etc.) Dans mon cas, j'ai créé une classe nommée BounceWidget
Ajouter un élément au xml
<hackro.tutorials.com.bounceWidget.widget.BounceWidget
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
Ajouter un élément par programmation
val xpp = resources.getXml(R.xml.bouncewidget)
val attr = Xml.asAttributeSet(xpp)
val layout : LinearLayout = findViewById(R.id.layout)
val octocat1 : BounceWidget = BounceWidget(this,attr)
//you can change this values and have default values
//octocat1.id_resource(R.mipmap.bounceimage) // change image --> default : R.mipmap.ic_launcher
//octocat1.positionX = 1 //position X starting --> default : 0
//octocat1.positionY = 1 //position Y starting--> default : 0
//octocat1.velocityX = 1 //Velocity X --> default : 20
//octocat1.velocityY = 1 //Velocity Y --> default : 15
octocat1.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
layout.addView(octocat1)