0

私はそれについて約4-5ビューの活動をしています。背景は白です。理想的には、アクティビティ全体を真っ白にフェードしてから、新しいアクティビティをフェードインしたいと思います。しかし、カラーアニメーションは不可能なので、私はその考えを捨てました。私が作成したアニメーションは次のようになります。

フェードイン:

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" 
        android:interpolator="@android:anim/accelerate_interpolator" 
        android:duration="1200"/>
</set>

フェードアウト:

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" 
        android:interpolator="@android:anim/accelerate_interpolator" 
        android:duration="1200"/>
</set>

すべてのアクティビティに次のコード行を追加して、アニメーションを設定するだけです。

overridePendingTransition( R.animator.fadein, R.animator.fadeout);

ただし、ここに問題があります。アクティビティのアルファ値を使用してフェードアウトする場合、アルファ値を下げると、アクティビティ全体が灰色に変わります。これは白い背景ではきれいに見えません。

そこで、アクティビティに関するすべてのビューをフェードアウトするというアイデアを思いつきました。私の質問:これを正しく行うにはどうすればよいですか?ちなみに、もっといいアイデアがあれば、遠慮なく教えてください。ありがとう!

4

3 に答える 3

1

1つの方法は、ビューをRelativeLayoutでラップしてから、ビューを膨らませて、00ffffffの背景色とfill_parentパラメーターを使用して外側のRelativeLayoutに追加することです。

新しいアクティビティを開始する前に、ハンドラーとランナブルを使用して、設定された間隔でアルファ値を増やします(ビューを無効にします)。アルファが255になったら、新しいアクティビティを開始します。Handler.postDelayed()の速度を好みに合わせて調整します。

于 2013-03-14T15:21:36.253 に答える
1

これは、GoogleのAndroidのグラフィックスペシャリストの1人からのクールなブログ投稿です -Old Views Do n't Die; 彼らはただ消え去る

あなたのプロジェクトにそれを使うことができると確信しています。彼がアニメーションについて持っている他の記事とYouTubeビデオをチェックしてください、それらはかなり素晴らしいです。幸運を!

于 2013-03-14T15:44:04.587 に答える
0

npaceが言及した記事に触発されて私の質問に答えました。以下に私のフェードアウト方法を示します。上で作成したアニメーションを使用して、親コンテナRelativeLayoutにあるすべてのビューをフェードアウトします。

RelativeLayout container = findViewById(R.id.mainContainer);

for(int i = 0; i < container.getChildCount(); i++)
            container.getChildAt(i).startAnimation(AnimationUtils.loadAnimation(c, R.animator.fadeout));

        new Handler().postDelayed(new Runnable()
        {
            @Override
            public void run()
            {
                for(int i = 0; i < container.getChildCount(); i++)
                    container.getChildAt(i).setVisibility(View.INVISIBLE);
                c.startActivity(intent);
            }
        }, fadeDuration);
于 2013-03-14T17:26:52.907 に答える