设置alpha 0后,Android make按钮被禁用

时间:2015-06-02 16:05:24

标签: android alpha

可能是另一个修辞问题。

在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开发人员有更好的解决方案?

2 个答案:

答案 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();