0

私はアンドロイドのアニメーションが初めてで、プロパティアニメーションを操作しようとしています。x プロパティの変換を使用してスライド効果を実行しようとしています。しかし、私は望む結果を得ていません。

私は次のようなレイアウトを持っています:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <LinearLayout
        android:id="@+id/parent"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:orientation="horizontal" >

        <LinearLayout
            android:id="@+id/first"
            android:layout_width="320dp"
            android:layout_height="200dp"
            android:background="#00ff00" >
        </LinearLayout>

        <LinearLayout
            android:id="@+id/second"
            android:layout_width="320dp"
            android:layout_height="200dp"
            android:background="#0000ff" >
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

レイアウト次第。水平に配置された親線形レイアウトに 2 つの線形レイアウトがあります。最初のレイアウトのみが表示され、2 番目のレイアウトは画面外に表示されます。翻訳を使用して親をスライドさせ、最初に非表示にし、2番目に表示するように、親の x プロパティをアニメーション化しようとしています。以下は私のコードです:

    LinearLayout parent_;
    LinearLayout first_;
    LinearLayout second_;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    parent_ = (LinearLayout) findViewById(R.id.parent);
    first_ = (LinearLayout) parent_.findViewById(R.id.first);
    second_ = (LinearLayout) parent_.findViewById(R.id.second);
}

アニメーションをシミュレートするためだけに、オプション メニューを使用しています。

static boolean a = true;
@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if(a){
        ObjectAnimator animate = ObjectAnimator.ofFloat(parent_, "x", -parent_.getWidth());
        animate.setDuration(500);
        animate.start();
        animate.addListener(this);
        animate.addUpdateListener(this);
        a = false;
    } else {
        ObjectAnimator animate = ObjectAnimator.ofFloat(parent_, "x", -parent_.getWidth(), 0);
        animate.setDuration(500);
        animate.start();

        a = true;
    }
    return super.onOptionsItemSelected(item);
}

アプリケーションを起動すると、アプリケーションは次のようになります。

ここに画像の説明を入力

アニメーションの後、アプリケーションは次のようになります。

ここに画像の説明を入力

注: 白い領域は、実際にはスクリーンショットの一部です。背景を白に。

アニメーションの後、青いレイアウトを表示する代わりに。左に完全にスライドして隠れます。青のレイアウトは表示されません。アニメーション中のスクリーンショットを撮ってみました。次のようになります。

ここに画像の説明を入力

私は何を間違っていますか??? 私は私の質問をよく説明したことを願っています....

4

1 に答える 1

2

線形レイアウトでは、子が表示されていない場合、子はレイアウトされず、測定の一部にもなりません ( のように見えます)。RelativeLayout を使用して、青色の子を緑色の子の背後に隠しておく必要があります。これにより、それは画面の一部のままになります。そしてそれは働いた...

于 2012-11-25T16:41:29.980 に答える