Как программно анимировать ImageView

Я пытаюсь анимировать ImageView при щелчке по указанному изображению.

В частности, я хочу, чтобы размер ImageView стал больше (скажем, 20 больше) и сразу уменьшился до первоначального размера).

Пока я экспериментировал с этим кодом без везения.

// 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); } }); 

Может ли кто-нибудь предложить мне возможное решение?

Редактировать # 1

Он работает через XML, как ответил 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); 

И 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: это неудобно, так как я уже принял ответ. Я пытаюсь объединить ответы @tharkbad и @ Hardik4560, но теперь он не выглядит гладко.

Во время анимации scale_up это похоже на «пропустить» до конца анимации, а затем сразу же запустить анимацию scale_down. Думаю, мне нужно немного поиграть с ним.

Я использую это для достижения эффекта popin popout,

Посмотрите, может ли он вас использовать

Выскочить.

 <?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> 

Поп в

 <?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> 

Если вы хотите реализовать это без XML, вы можете сделать это следующим образом

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

Конечно, вы также можете использовать NineOldAndroids и использовать новые методы анимации.

Я думаю, что ваша исходная ошибка – это строка, она удаляет только что запущенную анимацию из представления.

 thumbLike.setAnimation(null);