2011-06-18 14 views
1

私はいくつかのアニメーションをスピードアップする方法を探しています。静的フィールドにアニメーションを保存する

私はthis articleに出くわしました。静的フィールドに大きなビットマップを格納すると、アプリケーションの読み込み時間に役立つことになります(パラグラフ4を参照)。

AnimationDrawableの同等のテクニックは何でしょうか?

フレームをアニメーション描画可能にプリロードすることは可能ですか?彼らはデフォルトでプリロードされていますか?これは私が物事をスピードアップするのに役立ちますか?

私は256x256の.pngで構成されたフレームアニメーションを実行していますが、それらは100x100程度の画像ビューのサイズに縮小されています。これはアプリの使用時に変更されます別の画面サイズのデバイスでは、私のアプリケーションのonCreateメソッドが呼び出された後、この100x100イメージビューのサイズは変更されません。

ソリューション:私は、標準のアニメーション形式を使用することができるように、次のように私には受け入れられてソリューションを変更している(と私はすでに私のアニメーションがエンコードされていたことで)アンドロイド用途:

public Bitmap[] setAnimationArray(int res_anim){ 
     this.my_view.setBackgroundResource(res_anim); //view sized properly elsewhere 
     AnimationDrawable t_anim = (AnimationDrawable) this.my_view.getBackground(); 
     Bitmap[] anim = new Bitmap[t_anim.getNumberOfFrames()]; 
     for(int i = 0;i<t_anim.getNumberOfFrames();i++){ 
      anim[i]=((BitmapDrawable) t_anim.getFrame(i)).getBitmap(); //extract bitmaps from the animation 
     } 
    return anim; 

編集:以下の答えへ私は、手動でサーフェスビューでアニメーションを実行することは、標準的な方法を使用してアニメーション化する方がはるかに高速であるように思えます。詳細については、Android SurfaceViewを検索してください。

答えて

0

そうのようなarrays.xmlであなたのビットマップを定義します。

<array name="targetFrames"> 
     <item>@drawable/bitmap1</item> 
     <item>@drawable/bitmap2</item> 
     ... 
    </array> 

あなたはビットマップの配列を作成するには、このような何かを行うことができます。

private void setupTargetFrames() { 
     TypedArray targetResources = context.getResources().obtainTypedArray(R.array.targetFrames); 
     targetFrames = new Bitmap[targetResources.length()]; 

     for (int i = 0; i < targetResources.length(); i++) { 
      targetFrames[i] = BitmapFactory.decodeResource(context.getResources(), targetResources.getResourceId(i, R.drawable.defaulBitmap)); 
     } 

     targetResources.recycle(); 
    } 

そして、ビットマップを巡回して、アニメーションを再生。

参照BitmapFactoryの他の方法あなたがそれをロードする際にビットマップを拡張したい場合。

+0

はこの提案をありがとう、私はそれを試してみますよ – tjb

関連する問題