私は自分の問題の解決策を探していました。しかし、私のコードは問題ないようです。
説明しようと思います。レイアウト定義にAndroid:alpha = "0"のTextViewがあります。 (画像がクリックされたときに)0.0fから1.0fまでのAlphaAnimationを持つTextViewを表示したい。
私の問題は、画像をクリックしても何も起こらないことです。奇妙なことに、レイアウト定義でアルファを1に設定して画像をクリックすると、アニメーションが表示されます(アルファ1->アルファ0->アルファ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);
前もって感謝します。
問題は_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
_に変更します。そのため、最初の場合はテキストが表示されず、2番目の場合はすべて期待どおりに機能します。
物事を機能させるには、レイアウトxmlで可視性プロパティを非表示に設定する必要があります。アルファアニメーションを開始する前にtv.setVisibility(View.VISIBLE);
を呼び出します
より簡単な方法が this の回答に示されています。
tv.animate().alpha(1).setDuration(1000);
実際には、Androidビューに2つの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;
}
ビューの最終アルファは、2つのアルファの積です。
View#setAlpha(float) & View#animate() & Android:alpha -> mAlpha
AlphaAnimation -> mTransitionAlpha