以下是需要做的事情:
我有一个带3个按钮的顶栏。右边两个可以按下,没有什么是有趣的。左边的一个用其他三个按钮替换所有三个按钮。使用动画:中间和右侧(新的)按钮从左按钮的位置滑出到相应的位置,而旧按钮则淡出。左按钮在没有移动的情况下被替换:旧按钮淡出,新按钮淡入。
如何做到这一点:
final Animation fadeOut, fadeIn;
Animation fadeOutWithListener;
fadeIn = AnimationUtils.loadAnimation(this, R.anim.camera_top_bar_fade_in);
fadeOut = AnimationUtils.loadAnimation(this, R.anim.camera_top_bar_fade_out);
final TranslateAnimation slideAnim;
slideAnim = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, -flashAutoBtn.getLeft(),
Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 0);
slideAnim.setDuration(1000L);
slideAnim.setStartOffset(0);
fadeOutWithListener = AnimationUtils.loadAnimation(this, R.anim.camera_top_bar_fade_out);
fadeOutWithListener.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
flashAutoBtn.startAnimation(fadeIn);
flashOnBtn.startAnimation(slideAnim);
flashOffBtn.startAnimation(slideAnim);
}
@Override
public void onAnimationEnd(Animation animation) {
flashBtn.setVisibility(View.INVISIBLE);
gridBtn.setVisibility(View.INVISIBLE);
switchCameraSideBtn.setVisibility(View.INVISIBLE);
flashAutoBtn.setVisibility(View.VISIBLE);
flashOffBtn.setVisibility(View.VISIBLE);
flashOnBtn.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationRepeat(Animation animation) { }
});
flashBtn.startAnimation(fadeOutWithListener);
gridBtn.startAnimation(fadeOut);
switchCameraSideBtn.startAnimation(fadeOut);
它是如何工作的: fadeIn / Out动画没问题 - 它们以xml定义,持续时间设置为1000,持续时间为1秒。没有偏移。
两个翻译动画工作不正确:首先,它们不会与fadeOutWithListener动画同时启动。相反,他们等待100或200毫秒然后快速(持续时间为100或200毫秒)闪烁他们的变换(坐标是正确的btw)并消失。完成fadeOutWithListener后 - 侦听器的onAnimationEnd激活,按钮变为可见。
这是最后的尝试 - 在没有监听器之前 - 只是连续调用startAnimation和setVisibility - 是相同的相同行为。
答案 0 :(得分:2)
如果你同时将两个动画应用于同一个ui,我记得,将会执行最新的动画。
要同时制作多个动画,您需要使用AnimationSet
AnimationSet set = new AnimationSet(false);
set.addAnimation(fadeOut);
set.addAnimation(slideOut);
view.setAnimation(set);
set.start();