可能是另一个修辞问题。
在iOS中,当我们将视图(任何任何UIView
子类,例如UIButton
)alpha设置为0时,iOS默认禁用该视图上的所有用户交互。
我有一个Android应用程序,我通过以下方式淡出视图:
ObjectAnimator fadeOut = ObjectAnimator.ofFloat(buttonSelectionContainer, "alpha", 1, 0);
fadeOut.setDuration(500);
fadeOut.start();
然而,我注意到,当我点击屏幕时,动画再次启动,让我相信,在Android中,即使按钮alpha设置为0,它仍然是可点击的,这是真的吗?
有没有办法全局告诉Android在视图(及其所有子视图)的情况下,当其alpha设置为0时,禁用用户互动,或者明确地使用:
view.setAlpha(0.0f);
或通过我使用的上述代码块的ObjectAnimator
?
我的问题的临时解决方法可能是安排此代码在500毫秒后运行:
// psuedocode: after 500ms
dispatch_doSomethingAfter(500)
{
myButton.setEnabled(false);
}
不是理想的解决方案,但可能是我唯一的解决方案,除非一些聪明的Android开发人员有更好的解决方案?
答案 0 :(得分:3)
在addListener
上使用ObjectAnimator
来控制动画播完后会发生什么。
fadeOut.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
button.setEnabled(false);
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
答案 1 :(得分:0)
您可以创建Animator.AnimatorListener
,自动在动画结束时禁用目标View
。
声明您的自定义DisableViewOnEndAnimatorListener
类:
public class DisableViewOnEndAnimatorListener extends AnimatorListenerAdapter {
@Override
public void onAnimationEnd(Animator animation) {
if (animation instanceof ObjectAnimator) {
final Object target = ((ObjectAnimator) animation).getTarget();
if (target instanceof View) {
((View) target).setEnabled(false);
}
}
}
}
然后,在您的代码中:
DisableViewOnEndAnimatorListener endAnimatorListener = new DisableViewOnEndAnimatorListener();
ObjectAnimator button1FadeOut = ObjectAnimator.ofFloat(button1, "alpha", 1, 0);
button1FadeOut.setDuration(500);
button1FadeOut.addListener(endAnimatorListener);
button1FadeOut.start();
ObjectAnimator button2FadeOut = ObjectAnimator.ofFloat(button2, "alpha", 1, 0);
button2FadeOut.setDuration(500);
button2FadeOut.addListener(endAnimatorListener);
button2FadeOut.start();