我正在开发一个Android项目。
在这个项目中,我有一个ImageView和一个按钮。当用户点击按钮时,我希望ImageView的alpha值从1变为0.5,然后立即从0.5变为1.
我写了以下代码:
public void animate(ImageView imageView)
{
int animDuration = 50;
int timeBetween = 2;
AlphaAnimation animation1 = new AlphaAnimation(1, (float) 0.5);
animation1.setInterpolator(new AccelerateInterpolator());
animation1.setDuration(animDuration);
AlphaAnimation animation2 = new AlphaAnimation((float) 0.5, 1);
animation2.setInterpolator(new AccelerateInterpolator());
animation2.setStartOffset(animDuration + timeBetween);
animation2.setDuration(animDuration);
AnimationSet animation = new AnimationSet(true);
animation.addAnimation(animation1);
animation.addAnimation(animation2);
animation.setRepeatCount(1);
imageView.setAnimation(animation);
}
当用户点击它时,我将ImageView传递给此函数。
但它没有正常工作,没有任何改变。有什么问题?
答案 0 :(得分:1)
从View.setAnimation()
文档(强调我的):
设置要为此视图播放的下一个动画。 如果您想立即播放动画,请改用startAnimation(android.view.animation.Animation)。此方法允许对开始时间和失效进行细粒度控制,但您必须确保1)动画具有开始时间设置,以及2)当动画应该开始时,视图的父级(控制其子级上的动画)将无效。
虽然您已为animation2
设置了起始偏移量,但您没有为AnimationSet
本身设置开始时间,因此View无法知道何时开始动画。
如果您想立即启动动画,请改用startAnimation()
。如果您希望动画在特定时间开始,请在动画集上调用setStartTime()
或setStartOffset()
。
答案 1 :(得分:0)
您可以尝试使用此动画代码:
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
android:duration="1000"
android:fromAlpha="1"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="0.5"
android:repeatMode="reverse"
android:repeatCount="1"/>
</set>
并在您的活动中设置此动画,如下所示:
anim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.animatealpha);
image.startAnimation(anim);
这里animatealpha是包含上述动画的xml的名称。 希望这会有所帮助。