4

私が持っているとしましょうImageButton btn。と の 2 つの異なるBitmapbmp1ありbmp2ます。デフォルトでは、次のようにbtn表示されます。bmp1

btn.setImageBitmap(bmp1);

次の呼び出し時に、bmp1とをクロスフェードするアニメーションをどうにかして作成できますか。bmp2

btn.setImageBitmap(bmp2);

問題は、可能であれば、どのように ImageButton のビットマップの変更をアニメーション化できるかということです。

4

2 に答える 2

8

私の見方では、この機能を実装するには主に 2 つの方法があります。あなたが説明しているのとまったく同じようにこれを実現する他の方法があるかもしれないことに注意してください。しかし、これらは私のアプローチです。

最初のアプローチ:onAnimationEnd()コールバックの活用

ここでは、基本的に最初のをフェードアウトし、コールバックでImageButtonリソースを変更してからフェードインする必要があります。これを行うには、以下のコードを実装する必要があります。onAnimationEnd()

  1. Animationフェードインに使用される XML でリソースを作成しますView

    <!-- Filename: fadein.xml -->
    <set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- Note that you might want to change the duration here-->
    <alpha 
        android:fromAlpha="0.0" 
        android:toAlpha="1.0"  
        android:duration="250"/> 
    </set>   
    
  2. Animationフェードアウトに使用される XML でリソースを作成しますView

    <!-- Filename: fadeout.xml -->
    <set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- Note that you might want to change the duration here-->
    <alpha 
        android:fromAlpha="1.0" 
        android:toAlpha="0.0"  
        android:duration="250"/> 
    </set>
    
  3. コードにフェードアウトとフェードインをロードAnimationします。

    // Obtain a reference to the Activity Context
    Context context = getContext();
    
    // Create the Animation objects.
    Animation outAnimation = AnimationUtils.loadAnimation(context, R.anim.fadeout);
    Animation inAnimation = AnimationUtils.loadAnimation(context, R.anim.fadein);
    
  4. AnimationListenerthisにnew を割り当て、Animation次のように構築します。

    outAnimation.setAnimationListener(new AnimationListener(){
    
        // Other callback methods omitted for clarity.
    
        public void onAnimationEnd(Animation animation){
    
            // Modify the resource of the ImageButton
            yourImageButton.setImageResource(R.drawable.[your_second_image]);
    
            // Create the new Animation to apply to the ImageButton.
            yourImageButton.startAnimation(inAnimation);                                           
        }
    }
    
  5. を に割り当て、最初AnimationImageButtonを開始しAnimationます。

    yourImageButton.startAnimation(outAnimation);
    
  6. 次に、前の画像にアニメーションを戻したい場合は、同じことを逆の順序で行うだけです。

2 番目のアプローチ: 2 番目のオーバーレイImageButton

このアプローチでは、2 つImageButtonの を画面上の同じ座標に同じ幅で割り当てるだけです。次に、最初の動画をフェードアウトし、最初の動画が終了しImageButtonた後に 2 番目の動画をフェードインしますAnimation(上記の例によく似ています)。


この回答があなたの期待に沿うものであることを願っています。現時点ではエディタなしでこれを行っているため、コード エラーがある場合は申し訳ありません。追加の説明が必要な場合はお知らせください。

于 2013-10-09T13:38:39.280 に答える
1

イメージ ボタン ソースの変更をアニメーション化することはできません。回避策は、2 つの ImageButton をスタックし、そのアルファ チャネルを個別にアニメーション化して、予期される動作を取得することです。

于 2013-10-09T12:24:54.003 に答える