2011年2月11日金曜日

surfaceView でのフェード処理

画面の遷移としてフェード処理が欲しくて調べてみました。
当初の計画としては surfaceView に AlphaAnimation を組み込みたいと
色々と頑張っていたのです
surfaceView は Viewのsubclass ですから setAnimationメソッド等があります
当然利用出来るだろうと 色々と頑張ってみました
が 無理でした。 (できた方いらしたら教えて下さい)

そこで次善の策として 書き込んでいるcanvasの最後に
透明度を変化させるBMPを書きこむ方法を実装したのですが・・・
ちょっと躓いてしまったので メモします
同じ事でお悩みの方 どうぞ(笑

■駄目だった例
public class GameView extends SurfaceView implements SurfaceHolder.Callback
{
public GameView(Context c)
{
super(c);
getHolder().addCallback(this);
setFocusable(true);
requestFocus();
}

protected Bitmap mBmpMask ;
protected Canvas mCanvasMask;

public void surfaceCreated(SurfaceHolder holder)
{
※必要な初期化処理
mBmpMask = Bitmap.createBitmap( 64, 64,Bitmap.Config.ARGB_4444  );
mCanvasMask = new Canvas( mBmpMask );
}

public void draw()
{
Canvas canvas = getHolder().lockCanvas();
canvas.drawColor(Color.BLACK);

※ここに必要な描画処理

※最後にフェード用のマスクとして事前に準備しているBMPに書きこむ
mCanvasMask.drawARGB( (可変するalpha値), 0, 0, 0);
Rect src = new Rect( 0,0,64,64);
Rect dst = new Rect(0,0, getWidth(),getHeight());
canvas.drawBitmap( mBmpMask, src, dst, null);

getHolder().unlockCanvasAndPost(canvas);
}
}


■上手くいった例
public class GameView extends SurfaceView implements SurfaceHolder.Callback
{
public GameView(Context c)
{
super(c);
getHolder().addCallback(this);
setFocusable(true);
requestFocus();
}

public void surfaceCreated(SurfaceHolder holder)
{
※必要な初期化処理
}

public void draw()
{
Canvas canvas = getHolder().lockCanvas();
canvas.drawColor(Color.BLACK);

※ここに必要な描画処理

※最後にフェード用のマスクをカンバスに直接ペイント
Paint p = new Paint();
p.setAlpha( 可変するalpha値 );
canvas.drawPaint(p);

getHolder().unlockCanvasAndPost(canvas);
}
}

以上です 別に専用のBMPはいらないようですね

2011年2月8日火曜日

今日からはじめます いつまで続くやら

今日からはじめます いつまで続くやら
アンドロイドマーケットに一本ゲームを登録するまでの記録のつもりなのですが
実際はもう2ヶ月前から研究開発しています
取りあえず 過去の事は置いておいて
今後何かに躓いた時に 忘言録として記憶しますね