加入收藏 | 设为首页 | 会员中心 | 我要投稿 烟台站长网 (https://www.0535zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Android画图防止屏幕闪烁

发布时间:2021-11-30 12:58:04 所属栏目:教程 来源:互联网
导读:根据应用网_丽江站长网 Www.0888Zz.Com报道 在处理一些复杂的界面时,往往要用view,SurfaceView来自己处理画图。比如用SurfaceView来贴两张图,并控制他们左右平移,基本代码如下: Canvas c = null; try { c = mSurfaceHolder.lockCanvas(null); if (c != n
根据应用网_丽江站长网 Www.0888Zz.Com报道

在处理一些复杂的界面时,往往要用view,SurfaceView来自己处理画图。比如用SurfaceView来贴两张图,并控制他们左右平移,基本代码如下:
 
       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其实也是一样的,上面的问题解决方法如下:
 
        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(); //记得回收内存位图
 
这样处理后,view刷新将变得平滑,眼睛看着舒服多了。

(编辑:烟台站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读