2011-06-30 9 views
2

キャラクターをアニメーション化(例えば、犬を走らせる)したいです。 AnimationDrawableはこれに最適と思われ、AnimationDrawableにはImageViewが必要です。 SurfaceViewでImageViewを追加して移動するにはどうしたらいいですか?SurfaceViewのAndroidアニメーションキャラクター

ありがとうございました。

答えて

0

SurfaceViewを使用すると、すべてをその中に描画することはお客様の責任です。キャラクターをレンダリングするためにAnimationDrawableやビューは必要ありません。 GoogleからLunar Landerサンプルゲームをご覧ください。

+0

ありがとうございましたBurov、AnimationDrawableはゲームには適していませんか? – droidbee

+0

はい、そうです。 AnimationDrawableはビューではなく、nmeloの説明どおりに使用できます。 – RichieHH

3

ImageViewは不要です。

あなたのアニメーションがXML Drawableであれば、あなたはAnimationDrawable変数にResourcesから直接読み込むことができます。そして、それは限界だし、キャンバス上に描画

Resources res = context.getResources(); 
AnimationDrawable animation = (AnimationDrawable)res.getDrawable(R.drawable.anim);  

animation.setBounds(left, top, right, bottom); 
animation.draw(canvas); 

また、次のスケジュールされた間隔でアニメーションを手動で設定する必要があります。これは、animation.setCallbackを使用して新しいコールバックを作成し、次にandroid.os.Handlerをインスタンス化し、handler.postAtTimeメソッドを使用して、現在のThreadのメッセージキューに次のアニメーションフレームを追加することによって達成できます。

animation.setCallback(new Callback() { 

    @Override 
    public void unscheduleDrawable(Drawable who, Runnable what) { 
    return; 
    } 

    @Override 
    public void scheduleDrawable(Drawable who, Runnable what, long when) { 
    //Schedules a message to be posted to the thread that contains the animation 
    //at the next interval. 
    //Required for the animation to run. 
    Handler h = new Handler(); 
    h.postAtTime(what, when); 
    } 

    @Override 
    public void invalidateDrawable(Drawable who) { 
    return; 
    } 
}); 

animation.start(); 
+1

ハンドラを再利用しない理由はありますか? – RichieHH

関連する問題