Android View淡出但不会淡入

时间:2014-09-30 08:53:30

标签: android android-animation fade

我创建了一个非常简单的动画,它应该让图标淡出然后重新进入,然后退出。 (只是为了好玩)

当你点击屏幕时,我希望图标在50毫秒内淡出,然后立即淡入,然后立即再次淡出。

然而,当我点击时,图标会逐渐消失,不再执行任何操作!

以下是方法:

public boolean onTouchEvent(MotionEvent event) {
        centralIcon = (ImageView) findViewById(R.id.centralIcon);
        float fullAlpha = centralIcon.getAlpha();
        centralIcon.animate().setDuration(50);
        centralIcon.animate().alpha(0);
        centralIcon.animate().alpha(fullAlpha);
        centralIcon.animate().alpha(0);
        return true;
    }

为什么它不会消失?

2 个答案:

答案 0 :(得分:1)

你指定的是3个应该一个接一个地发生的动画,但是你编码动画的方式却不会一个接一个地发生,你所做的就是返回与ViewPropertyAnimator相关联的动画使用视图是一个实例,并覆盖alpha动画3次(因为调用alpha()会创建一个新动画并在alpha属性上取消更多动画),因此只会运行最后一个动画。

你应该创建一个动画集并将动画偏移到前一个完成后开始(可能超过50毫秒,因为它很短!它几乎不会引人注意)。

此代码应该有效:

    AnimationSet a = new AnimationSet(true);

    float fullAlpha = centralIcon.getAlpha();

    AlphaAnimation alpha[] = new AlphaAnimation[3];//array of 3 alpha animations

    alpha[0] = new AlphaAnimation(fullAlpha, 0);//first fade to 0
    alpha[0].setDuration(300);

     alpha[1] = new AlphaAnimation(0, fullAlpha);//then fade back to full
    alpha[1].setDuration(300);
    alpha[1].setStartOffset(300);//start after alpha[0] finishes

    alpha[2] = new AlphaAnimation(fullAlpha, 0);//then fade back to 0
    alpha[2].setDuration(300);
    alpha[2].setStartOffset(600);//start after alpha[0] and alpha[1] finish

    for(AlphaAnimation current : alpha)
        a.addAnimation(current);//add all the animations to the set

    a.setInterpolator(new LinearInterpolator());

    centralIcon.setAnimation(a);//attach the animation set to the view
    a.startNow();//start the animation set

答案 1 :(得分:1)

来自:http://developer.android.com/reference/android/view/ViewPropertyAnimator.html

public ViewPropertyAnimator alpha (float value)

在API级别12中添加 此方法将使View的alpha属性设置为指定值的动画。 已停止在该媒体资源上投放的动画。


部分问题以粗体显示。您可以通过再次调用alpha立即取消前两个alpha动画。 (您可以通过更改目标alpha值来测试这一点。)即使情况并非如此,期望动画按照您想要的方式运行也是没有意义的。 animate()。alpha(value)不会做你想象的。

如果您希望视图在50毫秒之后开始淡入淡出,则需要以某种方式指定该延迟。有很多方法可以使这个序列发生。例如,您可以使用在以后的动画中指定的偏移量制作一个AnimationSet(如AndroidNoob的回答)。您可以添加AnimationListener以侦听动画的结尾以开始下一个动画。您可以创建另一个在UI线程上运行一系列动画的线程。