我将此动画应用于按钮(RelativeLayout),同时用户按住或移动(按下时)触摸:
ScaleAnimation start = new ScaleAnimation(1, 1.2f, 1, 1.2f, 0x1, 0.5f, 0x1, 0.5f);
final ScaleAnimation end = new ScaleAnimation(1.2f, 1, 1.2f, 1, 0x1, 0.5f, 0x1, 0.5f);
end.setDuration(600);
start.setDuration(600);
button.startAnimation(start);
button.postDelayed(new Runnable() {
@Override
public void run() {
button.startAnimation(end);
}
}, 600);
当用户释放按钮时,必须调用另一个动画:
TranslateAnimation translateOut = new TranslateAnimation(0, -width, 1, 1);
translateOut.setDuration(600);
button.clearAnimation();
button.startAnimation(translateOut);
button.setVisibility(RelativeLayout.INVISIBLE);
它可以正常工作,但问题是按钮出现并在用户的最后触摸位置消失(闪烁)。
我已经尝试过这些代码来尝试修复它(并创建了一个标志来判断开始/结束动画是否正在运行),但它们都没有工作:
start.cancel();
end.cancel();
start/end.setFillAfter/Before(true);
button.clearAnimation();
任何解决方案?
答案 0 :(得分:0)
在开始动画后,您正在设置按钮不可见,因此在动画运行时您的按钮是不可见的。尝试使用AnimationListener将可见性设置为在动画结束时不可见。
start.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {}
@Override
public void onAnimationRepeat(Animation animation) {}
@Override
public void onAnimationEnd(Animation animation) {
button.setVisibility(View.INVISIBLE);
}
});