我想知道我在这里做错了什么。
我使用dimesions 1080x1080:
创建一个位图Bitmap level = Bitmap.createBitmap(1080, 1080, Config.ARGB_8888);
然后我绘制一些线并将其放入其中并将其放在我的SurfaceView中的画布上:
c.drawBitmap(LevelBitmap.level, 0, 0, null);
此操作在我的谷歌电视NSZ-GS7上需要20毫秒。很久很久。
将surfaceCreated中的pixelformat设置为RGBX_8888或RGBA_8888会使事情变得更糟,绘制时间为30ms。
holder.setFormat(PixelFormat.RGBX_8888);
设置为RGB_888
holder.setFormat(PixelFormat.RGB_888);
当我画一些东西时,
会导致nullpointerexceptions
仅用于位图的Config.RGB_565和用于窗口的PixelFormat.RGB_565的组合 将画面以可接受的10ms绘制到画布上,但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);
}
}