关于Canvas的记录
AndROId 画图避免屏幕闪烁
在处理一些复杂的界面时,往往要用view,SurfaceView来自己处理画图。比如用SurfaceView来贴两张图,并控制他们左右平移,基本代码如下:
Java代码:
Canvas c = null;
try {
c = mSurfaceHolder.lockCanvas(null);
if (c != null) {
c.setDrawFilter(mFilter);
c.drawRect(0, 0, c.getWidth(), c.getHeight(), mBGPaint);
//画背景
c.drawBITmap(bm1, 0, 0, null);
c.drawBitmap(bm2,bm1.getWidth(), 0, null);
//第二张图画在第一张旁边
}
}
finally {
if (c != null) {
mSurfaceHolder.unlockCanvasAndPost(c);
}
}
控制它左右平移时,会发现屏幕非常闪烁,眼睛看着会非常累。研究以后发现,这是因为两张图是依次一张一张贴到屏幕上的,如果刷新频率高的话,会使屏幕非常的闪烁。
解决的办法其实非常简单,想起windows下开发解决画图闪烁的办法,先把要画的图先画好放在一张大的内存位图上,然后一下贴到屏幕。android其实也是一样的,上面的问题解决方法如下:
Java代码:
final Bitmap memBm = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.config.RGB_565);
final Canvas c = new Canvas(memBm);
c.setDrawFilter(mFilter);
c.drawRect(0, 0, c.getWidth(), c.getHeight(), mBGPaint);
//画背景
c.drawBitmap(bm1, 0, 0, null);
c.drawBitmap(bm2,bm1.getWidth(), 0, null);
//第二张图画在第一张旁边
Canvas render = null;
try {
render = mSurfaceHolder.lockCanvas();
if (render != null) {
render.drawBitmap(memBm, 0, 0, null);
}
}
finally {
if (render != null)
mSurfaceHolder.unlockCanvasAndPost(render);
}
memBm.recycle();
//记得回收内存位图
有空继续更新……
Android 画图避免屏幕闪烁
在处理一些复杂的界面时,往往要用view,SurfaceView来自己处理画图。比如用SurfaceView来贴两张图,并控制他们左右平移,基本代码如下:
Java代码:
Canvas c = null;
try {
c = mSurfaceHolder.lockCanvas(null);
if (c != null) {
c.setDrawFilter(mFilter);
c.drawRect(0, 0, c.getWidth(), c.getHeight(), mBGPaint);
//画背景
c.drawBitmap(bm1, 0, 0, null);
c.drawBitmap(bm2,bm1.getWidth(), 0, null);
//第二张图画在第一张旁边
}
}
finally {
if (c != null) {
mSurfaceHolder.unlockCanvasAndPost(c);
}
}
控制它左右平移时,会发现屏幕非常闪烁,眼睛看着会非常累。研究以后发现,这是因为两张图是依次一张一张贴到屏幕上的,如果刷新频率高的话,会使屏幕非常的闪烁。
解决的办法其实非常简单,想起windows下开发解决画图闪烁的办法,先把要画的图先画好放在一张大的内存位图上,然后一下贴到屏幕。android其实也是一样的,上面的问题解决方法如下:
Java代码:
final Bitmap memBm = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.RGB_565);
final Canvas c = new Canvas(memBm);
c.setDrawFilter(mFilter);
c.drawRect(0, 0, c.getWidth(), c.getHeight(), mBGPaint);
//画背景
c.drawBitmap(bm1, 0, 0, null);
c.drawBitmap(bm2,bm1.getWidth(), 0, null);
//第二张图画在第一张旁边
Canvas render = null;
try {
render = mSurfaceHolder.lockCanvas();
if (render != null) {
render.drawBitmap(memBm, 0, 0, null);
}
}
finally {
if (render != null)
mSurfaceHolder.unlockCanvasAndPost(render);
}
memBm.recycle();
//记得回收内存位图
有空继续更新……
觉得可用,就经常来吧! 欢迎评论哦! html5教程,巧夺天工,精雕玉琢。小宝典献丑了!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 关于Canvas的记录
本文地址: https://pptw.com/jishu/586427.html