android – 画布中的帧速率绘制位图更好?
作者:互联网
我正在动态壁纸拍摄动画.这是代码.它几乎遵循CubeWallpaper演示:
void drawFrame() {
final SurfaceHolder holder = getSurfaceHolder();
final BufferedInputStream buf;
final Bitmap bitmap, rbitmap;
Canvas c = null;
try {
c = holder.lockCanvas();
if (c != null) {
try {
buf = new
BufferedInputStream(assets.
open(folder+"/"
+imageList[ilen++])
);
bitmap = BitmapFactory.
decodeStream(buf);
rbitmap = Bitmap.createBitmap
(bitmap,
0,0,imageWidth,imageHeight,
transMatrix,false);
c.drawBitmap(rbitmap,
paddingX,
paddingY,
null);
if ( ilen >= imageCount ) ilen=0;
}
catch (Exception e) { e.printStackTrace(); }
}
} finally {
if (c != null) holder.unlockCanvasAndPost(c);
}
// Reschedule the next redraw
mHandler.removeCallbacks(mDrawCube);
if (mVisible) {
mHandler.postDelayed(mDrawCube, fps);
}
}
其中“transMatrix”是之前预定义的缩放和旋转矩阵.
它应该以30fps渲染,但当然不会那样做.我最初的猜测是BufferedInputStream是一个因素.我应该缓存其中的一些,因为我和Bitmaps一起使用.但任何其他想法?我是否必须使用OpenGL黑客进行动态壁纸?
解决方法:
是的,BufferedInputStream和BitmapFactory实际上不应该在drawFrame()中.你在每一帧上加载和创建资源,这是一个巨大的浪费.就像你说的那样,事先尽可能多地缓存,如果你发现在绘图过程中需要加载更多的东西,可以使用一个单独的线程来做它,这样就不会减慢绘图速度.
标签:android,bitmap,opengl-es,live-wallpaper 来源: https://codeday.me/bug/20190614/1237020.html