AlphaAnimation不起作用

时间:2012-07-08 21:42:31

标签: android animation alpha

我一直在寻找解决问题的方法。但我的代码似乎没问题。

我将尝试解释:我的布局定义中有一个带有android:alpha =“0”的TextView。我希望(当点击图像时)显示带有AlphaAnimation的TextView,从0.0f到1.0f。

我的问题是,当我点击图片时,没有任何反应。但奇怪的是,如果我在布局定义中将其alpha设置为1,并且我单击图像,我可以看到动画(alpha 1 - > alpha 0 - > alpha 1)。

我做错了什么?

我的代码:

TextView tv = (TextView) findViewById(R.id.number);

AlphaAnimation animation1 = new AlphaAnimation(0.0f, 1.0f);
animation1.setDuration(1000);
animation1.setFillAfter(true);
tv.startAnimation(animation1);

提前致谢。

4 个答案:

答案 0 :(得分:73)

问题出在android:alpha="0"。此属性设置视图http://developer.android.com/reference/android/view/View.html#attr_android:alpha

的透明度

当alpha属性等于0时,动画会将透明度从0*0.0f=0更改为0*1.0f=0。当alpha属性设置为1时,动画会将透明度从1*0.0f=0更改为1*1.0f=1。这就是为什么在第一种情况下你看不到文字,而在第二种情况下,一切都按预期工作。

要使工作正常,您必须在layout xml中将visibility属性设置为不可见。在开始alpha动画之前,请致电tv.setVisibility(View.VISIBLE);

答案 1 :(得分:14)

this答案中提供了更简单的方法:

tv.animate().alpha(1).setDuration(1000);

答案 2 :(得分:0)

实际上,Android的视图具有两个alpha属性

    /**
     * The opacity of the View. This is a value from 0 to 1, where 0 means
     * completely transparent and 1 means completely opaque.
     */
    @ViewDebug.ExportedProperty
    float mAlpha = 1f;

    /**
     * The opacity of the view as manipulated by the Fade transition. This is a hidden
     * property only used by transitions, which is composited with the other alpha
     * values to calculate the final visual alpha value.
     */
    float mTransitionAlpha = 1f;


/**
 * Calculates the visual alpha of this view, which is a combination of the actual
 * alpha value and the transitionAlpha value (if set).
 */
private float getFinalAlpha() {
    if (mTransformationInfo != null) {
        return mTransformationInfo.mAlpha * mTransformationInfo.mTransitionAlpha;
    }
    return 1;
}

最终视图Alpha是两个Alpha的乘积

View#setAlpha(float)View#animate()android:alpha-> mAlpha

AlphaAnimation-> mTransitionAlpha

答案 3 :(得分:0)

将动画的 fillBefore 属性设置为 true 为我解决了这个问题。

TextView tv = (TextView) findViewById(R.id.number);

AlphaAnimation animation1 = new AlphaAnimation(0.0f, 1.0f);
animation1.setDuration(1000);
animation1.setFillBefore(true);
tv.startAnimation(animation1);

FillBefore 在开始动画之前设置转换。