对于我的动态壁纸,我使用以下代码(由Runnable调用)绘制每个帧。每次调用时,我用纯色填充当前画布并绘制背景位图(bg_image已调整大小以完全适合屏幕)。然后我调用drawParticles(c),它只是简单地使用c.drawCircle(...)一堆遍布画布绘制粒子。当它包含位图时,动态壁纸画布闪烁
在动态壁纸预览模式下,此代码效果很好。但是,当我将其设置为我的动态壁纸时,它会闪烁,并且在绘图之前似乎不清除画布。让我来说明:
第1帧:绘制位图并覆盖圆圈。
第2帧:绘制位图并覆盖圆(基于我粗略的理解,有两个画布交替张贴以提高效率)。
第3帧:画布未被清除!此帧包含每个绘制圆的新位置以及来自第1帧的圆圈。
第4帧:包含每个绘制圆的新位置以及第2帧的圆圈!
最终效果是圆圈在整个屏幕上留下“闪烁”(我相信)两个交替的画布之间闪烁。为什么,根据我的代码,不是我的画布被清除每一帧?再次,这在预览模式下工作正常,但不是当它实际上被设置为我的动态壁纸。还值得注意的是,这个闪烁的问题只发生在我绘制位图的时候;如果背景只是纯色,那么这个问题就不会出现。
final SurfaceHolder holder = getSurfaceHolder();
Canvas c = null;
try {
c = holder.lockCanvas();
if (c != null) {
c.drawColor(Color.BLACK);
c.drawBitmap(bg_image, 0, 0, null);
fluid.drawParticles(c);
}
} finally {
if (c != null) holder.unlockCanvasAndPost(c);
}
mHandler.removeCallbacks(mDrawRunnable);
mHandler.postDelayed(mDrawRunnable, 1000/targetFramerate -(System.currentTimeMillis() - mLastTime));
}
听起来像你可能是对的。 – wopkins 2011-04-10 14:54:00
@wopkins谢谢你接受我的回答。 :-)我不知道你制作的是什么样的壁纸,但是使用“粒子”这个词让我觉得你也可能想看看游戏引擎(AndEngine,LibGDX)。另外,我认为星系壁纸的来源可以在这里找到:http://android.git.kernel.org/?p=platform/packages/wallpapers/Basic.git;a=tree;f=src/com/android /墙纸 – 2011-04-10 16:36:11