4

を使用してアルファ レベルを操作することにより、フェード アニメーションを含むレイアウトを表示していますAlphaAnimation

現在のソリューションは、Gingerbread を使用する 2 つのデバイスと Froyo を使用する 1 つのデバイスで正常に動作します。しかし、アイスクリームサンドには効かない!?

これが私のxmlレイアウトです。

<LinearLayout
        android:id="@+id/photoOptionBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:alpha="0"
        android:background="@color/gpsBackground"
        android:orientation="horizontal">

        <ImageButton
            android:id="@+id/displayShareBtn"
            style="@android:style/Widget.Holo.Button.Borderless.Small"
            android:background="@android:color/transparent"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|center_horizontal"
            android:padding="20dp"
            android:src="@drawable/share"
            android:contentDescription="Share the picture"/>

        <ImageButton
            android:id="@+id/displayDiscardBtn"
            style="@android:style/Widget.Holo.Button.Borderless.Small"
            android:background="@android:color/transparent"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|center_horizontal"
            android:padding="20dp"
            android:src="@drawable/contentdiscard"
            android:contentDescription="Discard Picture"/>

    </LinearLayout>

これは、ロードアップ時にアルファを0に設定するonCreateメソッドです.xmlで実行すると機能しません...

    AlphaAnimation alpha = new AlphaAnimation(0.0F, 0.0F);
    alpha.setDuration(0); // Make animation instant
    alpha.setFillAfter(true); // Tell it to persist after the animation ends
    // And then on your layout
    this._photoOptionsBar.startAnimation(alpha);

そして、それを表示したいときは、次のように呼び出します。

public void showOptions() {
        AlphaAnimation alpha = new AlphaAnimation(0.0F, 1.0F);
        alpha.setDuration(PhotoDisplayFragment.FADE_DURATION); // Make animation instant
        alpha.setFillAfter(true);
        this._photoOptionsBar.startAnimation(alpha);
        this._optionsShowing = true;
}

IceCream サンドイッチにロードすると、LinearLayout が表示されます。これは、ボタンをクリックしてその機能を実行し、表示する機能が呼び出されているためですが、表示されません。

どんな助けでも素晴らしいでしょう

4

2 に答える 2

6

問題はandroid:alpha=0線形レイアウトにあります。物事を機能させるには、レイアウト xml で可視性プロパティを非表示に設定する必要があります。そして、アルファアニメーション呼び出しを開始する前にsetVisibility(View.VISIBLE)

于 2012-10-23T10:56:07.317 に答える
2

私はこれとまったく同じ問題を抱えていました。

2 つの個別のアルファ プロパティがあるようです。AlphaAnimation一方をandroid:alpha変更し、他方を変更します。どちらのプロパティも ICS で使用されますが、ICSandroid:alpha以前は無視されます。

したがって、アニメーションを実行するために設定android:alpha="0"して使用AlphaAnimationする場合、ICS 以前android:alphaは無視されるため、問題なく動作します。ICS では、は 0 からAlphaAnimation変化しないため、ビューは常に非表示になります。したがって、解決策は単純に行を削除することです。android:alphaandroid:alpha="0"

これについて 100% 確信があるわけではありませんが、そのように動作しているようです。

また、2 つのアルファは少し異なる方法で機能すると思います。確かImageViewに、半透明の画像でのアルファを変更すると、AlphaAnimationよりもはるかに見栄えが悪くなりandroid:alphaます。しかし、それについてできることはあまりありません。

于 2012-11-02T12:18:02.010 に答える