2013年4月22日月曜日

画像の回転ロジック

PhotoRouletteでは12個の画像を回転させていますが、ルーレットに使う画像がたとえ1個でも100個でも大丈夫なように作っています。
実際には画像をArrayList<Bitmap>にすべて入れて下から順番に左回りに回転させながら描画しています。
 このとき回転角が360/12を超えたときリストから描画するindexに+1して12枚に足りなければ0から繰り返し12枚より多ければ2~13を表示というようにしていきます。
ソースは以下のような感じ。

//回転角+1
angle += 1f;
//回転角が360/12を超えたら描画開始indexを1つ増やす
if (angle >= (360f / 12f)) {
    angle = angle - (360f / 12f);
    start++;
    //ルーレットの画像数を超えたら0に戻す
    if (start > roulette.images.size()) { start = 0;}
}
Matrix mat = new Matrix();
//描画開始indexをセット
int index = start;
for (int i = 0; i < 12; i++) {
    mat = new Matrix();
    //画像中心を中心点にして回転
    mat.postRotate(((360f / 12f) * i) - 180f + angle, width / 2f, height / 2f);
    canvas.drawBitmap(roulette.images.get(index), mat, paint);
    index++;
    //ルーレットの画像数を超えたら0に戻す
    if (index >= roulette.images.size()) { index = 0;}
}

このルーレットを回すロジックはいろんなやり方で実装できると思いますが、結果が同じであればどんなやり方でもいいと思います。
こんなこというと怒られますが、今時多少効率の悪い書き方をしても影響が出る場面は少ないですし、よく後から見て直しやすく再利用しやすいようにとか言いますが、こういう汎用的ではない処理は実際のとこ見ることも再利用することも極々稀で多くの場合は1から作った方が古いのよりいい物が出来ます。

0 件のコメント:

コメントを投稿