我一直在寻找解决问题的方法。但我的代码似乎没问题。
我将尝试解释:我的布局定义中有一个带有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);
提前致谢。
答案 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
在开始动画之前设置转换。