スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

android開発でSurfaceViewでキャラの動きなんかのアニメーション(ゴリ押し)

とあるものを見てネタアプリを作りたい衝動に駆られて久しぶりに開発に手を付けてみました。
衝動に駆られただけなので作ったものを公開するかどうかは未知数です。

そこでSurfaceView上でキャラクターが動いているように見えるようなアニメーションをどうやって実装しようかとちょっと調べてみました。

調べてみてAnimationDrawableというものを使えば行けるのかなと思い試してみたのですが、Canvasで使うBitmapをどうやって取り出すの?となり断念。

・・・このぐらいなら自分で作ればいいんじゃないかなという結論に達し、まあいいかとここで調べるのを早々に断念して自分で作ってみました。

ということでその部分のプログラムを晒してみます。

//画像を返す関数(アニメーション機能付き)
public Drawable getImage(){
nowTime = System.currentTimeMillis();
long subTime = nowTime - initTime;
int intSubTime = (int)subTime/animationInterval;
animationNum += intSubTime;
if(animationNum >= imageList.drawableImageList.get(imageType).size()){
animationNum = animationNum % imageList.drawableImageList.get(imageType).size();
}
initTime += intSubTime*animationInterval;
return imageList.drawableImageList.get(imageType).get(animationNum);
}

説明
initTime:現在の画像のスタート時間を表す変数。この関数を呼ぶ前に現在時間に初期化しておくといい(一応初期値0とかでも動くはずだけど)
nowTime:現在の時間を入れる変数。
subTime:nowTimeとinitTimeとの差で画像を変更するかを判断。
animationInterval:それぞれの画像を表示したい間隔。といっても一つの画像表示時間を正確にではなく、画像1周が周期になることが大事。
intSubTime:subTimeをint型にしてanimationIntervalで割ったもの。この値が次の画像に行くか、もしくは何個画像を飛ばすかが決まる。
animationNum:何番目の画像を表示するかを保持する変数
imageList.drawableImageList.get(imageType):imageList(独自関数のインスタンス)で簡単にいうと今回使ってるアニメーション画像のリストのArrayList呼び出しです。
別のところで、これに画像を入れてます。

やってることは単純で、自分で時間見て画像のリストからどの画像を表示するかを選んで返すということをしているだけです。
DrawableであればBitMapにすることは簡単なので。

備忘録として機能の中心の関数だけしか書いてないので、アイディアの参考程度にしていただけたら嬉しいです。

今回は複数枚の画像を切り替える方法だけど画像をつなげて大きな一枚の画像にして画像の一部分を表示して表示する部分をスライドさせてアニメーションにするっていう方法もあるはず(あんまり詳しくないけどこっちの方が一般的?)。まあいいや、必要になればそっちは考えよう。

こんなゴリ押ししなくても関数あるよなど、もしあればぜひ教えてください。
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

kaiemon2011

Author:kaiemon2011
kaiemon2011といいます。
androidアプリを自作してgoogle playにて公開中。

android端末をお持ちの方はアプリをインストールしていただくと泣いて喜びます。

趣味:アプリ開発といえるようになりたいなぁ…

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
アクセスカウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。