1

レイアウトに3 つ表示したいのですViewsが、一度に 2 つしか表示できません。ボタンを押すと、一番左のビューが左にスライドし、真ん中のビューが左のビューの開始スペースを取ってスライドし、一番右のビューが画面にスライドするようにします。

ここにいくつかのスクリーンショットがあります:

アニメーション前:
ここに画像の説明を入力

アニメーション中(ペイント編集^^): ここに画像の説明を入力

アニメーション後: ここに画像の説明を入力

これは私のレイアウトファイルです:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:weightSum="3" >

    <FrameLayout
        android:id="@+id/stations_stations"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="20dp"
        android:layout_weight="1"
        android:background="@drawable/fragment_border" />

    <FrameLayout
        android:id="@+id/stations_singlestation"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="20dp"
        android:layout_weight="2"
        android:background="@drawable/fragment_border" />

    <FrameLayout
        android:id="@+id/stations_trip"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="20dp"
        android:layout_weight="1"
        android:background="@drawable/fragment_border"
        android:visibility="gone" />

</LinearLayout>

したがって、次のコードを使用して、画面の左端のビューをアニメーション化できます。

    final View stationsContainer = findViewById(R.id.stations_stations);
    Animation an = AnimationUtils.loadAnimation(this, R.anim.slide_out_left);
    stationsContainer.startAnimation(an);
    an.setAnimationListener(new AnimationListener() {

        @Override
        public void onAnimationStart(Animation animation) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationRepeat(Animation animation) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationEnd(Animation animation) {
            stationsContainer.setVisibility(View.GONE);
        }
    });

これにより、ウィンドウの左端のビューが左にアニメートされ、非表示に設定されます。中央のビューを新しい位置にアニメーション化することもできますが、アニメーションが完了すると、中央のビューは非常に短時間元の位置に戻り、その後正しい位置に移動します。どうすればこのジャンプを回避できますか?

4

4 に答える 4

3
  • クラスを使用して、と の間でLayoutTransistion可視性が変化するたびに子ビューを自動的にアニメーション化します。このクラスは以降から利用できます。VISIBLEGONEAPI 11

    サンプル コードについては、sdk に付属のサンプルを確認してください。正確なパスはApiDemos\src\com\example\android\apis\animation\LayoutAnimationsHideShow.java

  • クラスを使用LayoutAnimationControllerして、ビューグループにビューが追加されたりビューグループから削除されたりするときにビューをアニメーション化します。ここでは、後で再度追加する必要があるため、削除されたビューへの参照を保持する必要があります。このクラスは、Android のすべてのバージョンで使用できます。

    サンプル コード パス:ApiDemos\src\com\example\android\apis\view\LayoutAnimation

于 2012-07-02T06:39:48.103 に答える
0

animationスライドインおよびスライドアウトに使用します。リソースでアニメーションをxmlとして定義する必要があります。

たとえばこれを参照してください

または、例として「これを試す」を使用できますViewFlipper

SOとWebにはさらに多くの例があります。

于 2012-06-28T14:57:38.307 に答える
0

FrameLayouts を ViewFlipper に追加します。例えば

<ViewFlipper>
 <FrameLayout1/>
 <FrameLayout2/>
 <FrameLayout3/>
</ViewFlipper>

次に、コードで setInAnimation(leftInAnim) と setOutAnimation(leftOutAnim) を viewFlipper に呼び出し、showNext() を呼び出します。これにより、現在のビューと次のビューにアニメーションが適用されます。

leftInAnim と leftOutAnim は、現在のビューをアニメーション化する方法をシステムに指示する XML アニメーション リソースです。

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="-100%p" android:toXDelta="0"
        android:duration="@android:integer/config_mediumAnimTime"/>
</set>

これにより、ビューが右側 (ビューの外) から現在のビューにスライドインします。

于 2012-06-28T15:01:06.260 に答える