3

イメージビューを別のビューの上に表示するための最良のアプローチを見つけようとしています。指をスライドさせると、一番上のイメージビューが画面からスライドします。カードのデッキについて考えてみましょう。指を使って一番上のカードをデッキからスライドさせると、その下のカードがどんどん見えてきます。

ImageSwitcherを使用する前に、スライドインおよびスライドアウトのアニメーションを作成しました。しかし、1つの画像が画面の右側にスライドし、別の画像が左から右にスライドするという方法で機能しました(これは、この場合は必要ありません)。そこで、2つのイメージビュー(一方を他方の上に)を作成することを考えました。上部を画面から外すと、下部がより見やすくなり、上部のイメージビューの下にあるように見えます。しかし、問題は、これを行うための画像がたくさんあることです。このようにした場合、画面を離れたら、上部の画像ビューを下部の画像ビューの下に配置する必要があります。

したがって、私が求めていることを明確にするために、 2つのイメージビューを上下に(Z軸)表示するための最善の方法は何ですか?ユーザーが画面上で指をスライドさせると、上部のイメージビューがスライドして外れます下部のimageviewを表示したままにする画面?

アドバイス、アイデア、ヘルプは大歓迎です!

4

1 に答える 1

1

いくつかの実験の後、私はついに私の解決策を思いつきました。ただし、希望する効果を完全に得るには、アニメーションを微調整する必要があります。最初にaを使用するLayerDrawableことを検討しました。これは、z軸に従って画像を相互に位置合わせするためです。しかし、一度に1つのレイヤーだけをアニメーション化する方法を思い付くことができませんでした。だから、私の問題を解決するために私はFrameLayout.

FrameLayoutsは、z軸上で物事を並べ替えるのに適しています(XMLに配置した順序で互いに重なります)。ただし、画面の特定の領域にビューを配置しようとすると、複雑になります。まず、レイアウトXMLを作成しました。

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    <ImageView 
        android:id="@+id/image_below"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" /> 
    <ImageView
        android:id="@+id/image_above"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    </FrameLayout>

次に、もちろん、Activityコンテンツビューを設定し、imageviewオブジェクトを宣言してインスタンス化しました。

setContentView(R.layout.game_layout);
ImageView imageOne = (ImageView)findViewById(R.id.image_above);
ImageView imageTwo = (ImageView)findViewById(R.id.image_below);

次に、アニメーションを作成しました。

Animation slideOutRight = AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right);

アニメーションが作成されたので、それに設定AnimationListenerします。このようにして、アニメーションがいつ完了したかを知ることができます。

slideOutRight.setAnimationListener(new AnimationListener(){
    @Override
        public void onAnimationEnd(Animation arg0) {
            imageTwo.bringToFront();

        }

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

        }

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

        }

});

上記のonAnimationEndメソッドのコードで気付いた場合、imageTwo.bringToFront();このように配置すると、上部のimageviewが画面からスライドすると、表示されなくなります(このメソッドを使用しなかった場合、上部のimageviewは元の場所に再表示されます。アニメーションが完了したら、他のimageviewの上に)。

最後に、必要なのは、imageviewsの画像を設定し、必要に応じてアニメーションを開始することだけです。

imageOne.setImageDrawable(getResources().getDrawable(R.drawable.YOUR_DRAWABLE_ONE);
imageTwo.setImageDrawable(getResources().getDrawable(R.drawable.YOUR_DRAWABLE_TWO);
imageOne.startAnimation(slideOutRight);

これが、同じ問題に直面する可能性のある他の人にとって役立つことを願っています。

于 2012-12-12T00:42:18.877 に答える