1

別のビューがスライドしてその代わりになるように、各項目を横にスライドできる ListView があります。各リスト行を、水平の RelativeLayout 内の 2 つのビューとして実装しました。ビューの 1 つは、最初は画面の外にあります。 ここに画像の説明を入力

問題は、(図に示すように) 最初に部分的に画面上にない限り、オフスクリーン ビューを画面にスライドさせたときにレンダリングできないことです。目に見えないビューは右側にあります。

これを達成するためのより良い方法はありますか?スライド中に .invalidate() と .setVisibility(VISIBLE) を呼び出そうとしましたが、効果がありません。

アップデート:

レンダリングの問題は、スライド中にプログラムで変更しようとしても、最初は非表示のビューの幅が常に 0であるようです。2 つのビューの周りに RelativeLayout を使用して、表示されるビューが画面にぴったり収まるようにしています。

ビューを指でドラッグできることが要件です。私は現在、それを達成するために View.OnTouchListener で MotionEvents をリッスンしています。

4

1 に答える 1

1

ビューをスライドイン/スライドアウトするコードやメソッドを提供していないという事実で、あなたの質問はかなり曖昧です。View Switcher または ViewFlipper をまだ使用していない場合、これで十分ではないでしょうか?

http://developer.android.com/reference/android/widget/ViewSwitcher.htmを使用してスライド効果を取得することもできます。これは 2 つのビューのみを許可し、アニメーションを介して一方のビューをスライドインし、もう一方のビューをスライドアウトします。必要なものに近いですが、いくつかの小さな欠点があります。ビュー スライダーは、ビュー フリッパーと同様に機能します (これにより、複数のビューを使用できます)。以下に、ビュー フリッパーのサンプル コードを示します。

http://developer.android.com/reference/android/widget/ViewFlipper.html

<ViewFlipper
    android:id="@+id/flipper"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

    YOUR VIEWS

    </LinearLayout>

   <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

      YOUR VIEWS

    </LinearLayout>

</ViewFlipper>

次に、独自のアニメーションを追加し、スワイプまたはその他のアクションで showNext を呼び出して、2 つのビュー間でアニメーション化できます (この場合、スライド インとスライド アウトのアニメーション)。

/* Flipper animations */
yourFlipper.setInAnimation(AnimationUtils.loadAnimation(this,R.anim.slide_in));
yourFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_out));

youFlipper.showNext();

リストビューのカスタム セルにビュー フリッパーを配置するだけです。これにより、非表示と表示が処理され、表示などをいじる必要がなくなりますが、まったく同じ目的の効果が得られない場合があることは承知しています。

于 2013-08-30T09:51:12.880 に答える