web-dev-qa-db-ja.com

AlphaAnimationが機能しない

私は自分の問題の解決策を探していました。しかし、私のコードは問題ないようです。

説明しようと思います。レイアウト定義に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);

前もって感謝します。

36
jjimenez

問題は_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);を呼び出します

77
vasart

より簡単な方法が this の回答に示されています。

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

実際には、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

0
Yessy