私はここで何が間違っているのか疑問に思っています。
1080x1080の寸法のビットマップを作成します。
Bitmap level = Bitmap.createBitmap(1080, 1080, Config.ARGB_8888);
次に、いくつかの線を描画してそこに修正し、SurfaceViewのキャンバスに配置します。
c.drawBitmap(LevelBitmap.level, 0, 0, null);
この操作は私のグーグルTVNSZ-GS7で20msかかります。ずっと長い。
surfaceCreatedのpixelformatをRGBX_8888またはRGBA_8888に設定すると、さらに悪化し、描画に30ミリ秒かかります。
holder.setFormat(PixelFormat.RGBX_8888);
RGB_888に設定
holder.setFormat(PixelFormat.RGB_888);
何かを描くとnullpointerexceptionsにつながります
ビットマップのConfig.RGB_565とウィンドウのPixelFormat.RGB_565の組み合わせのみが、許容可能な10ミリ秒でビットマップをキャンバスに描画しますが、RGB_565の品質はひどいものです。
私は何かが足りないのですか?Google TVは32ビットグラフィックスに対応していませんか?その「自然な」ピクセルおよびビットマップ形式は何ですか?私がグーグルで見逃したこのトピックに関するドキュメントはありますか?
ここで私がタイミングを測定するために使用する私の要求されたonDrawメソッド:
private static void doDraw(Canvas c) {
if (LevelBitmap.level == null){
LevelBitmap.createBitmap();
}
long time = System.currentTimeMillis();
c.drawBitmap(LevelBitmap.level, 0, 0, null);
Log.e("Timer:",""+(System.currentTimeMillis()-time) );
if(true) return;
ここで、ビットマップを作成するクラス:
public final class LevelBitmap {
public static Bitmap level;
public static void createBitmap() {
level = Bitmap.createBitmap(GameViewThread.mCanvasHeight, GameViewThread.mCanvasHeight, Config.ARGB_8888);
Canvas canvas = new Canvas(level);
canvas.scale(GameViewThread.fieldScaleFactor, GameViewThread.fieldScaleFactor);
canvas.translate(500, 500);
// floor covering
int plankWidth = 50;
int plankSpace = 500;
short size = TronStatics.FIELDSIZE;
for (int i = plankSpace; i < size; i = i + plankSpace) {
canvas.drawRect(i, 0, i + plankWidth, size, GameViewThread.bgGrey);
canvas.drawRect(0, i, size, i + plankWidth, GameViewThread.bgGrey);
}
// draw field
canvas.drawRect(-10, -10, TronStatics.FIELDSIZE + 10, TronStatics.FIELDSIZE + 10, GameViewThread.wallPaint);
}
}