在处理一些复杂的界面时,往往要用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刷新将变得平滑,眼睛看着舒服多了。

android绘制屏幕闪烁,Android画图避免屏幕闪烁相关推荐

  1. android绘制黑色画面,Android音视频技术入门之绘制一张图片

    Android 的音视频入门学习,首先了解一下绘制图片.在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View作绘制图片.下 ...

  2. android 绘制控件,Android自定义控件绘制基本图形基础入门

    本文讲述绘制Android自定义各种图形效果,为自定义控件的入门篇 相关视频链接: 绘制点–这个控件只需要在布局中引用或者代码中new 即可,下面几个绘制只展示onDraw方法 package com ...

  3. android 绘制心率曲线图,Android 特效View第四弹之折线图 心率图

    Android 特效View第四弹之折线图 心率图 android:layout_width="match_parent" android:layout_height=" ...

  4. android绘制心形,Android中的心形按钮

    I have this application that I am working on and the user can mark some items as a favorite. I want ...

  5. android绘制论文,基于Android平台的三维地形绘制研究与实现

    摘要: 地形是一种常见的三维场景,也是三维场景的重要组成部分,地形数据的实时绘制在PC端已经有大量研究,但如何实现移动端大规模地形的实时绘制是一个新问题.目前,移动端设备硬件性能发展迅速,但在移动端地 ...

  6. android绘制五环图形,Android使用Canvas实现奥运五环

    Canvas的drawXXX方法配合使用Paint可以实现圆点.圆.弧形和曲线等各种颜色的图形,本文将使用drawArc(@NonNull RectF oval, float startAngle, ...

  7. Android绘制波浪线 进阶

    前言 在我的上一篇博客中,我讲解了如何绘制一条波浪线,今天我们的目的是,绘制一条随心所欲的波浪线,什么叫随心所欲的波浪线呢,由于上篇主要讲解的是绘制波浪线的原理,不过就有人提问了,万一我想要的波浪线长 ...

  8. android 清理缓存动画,Android仿微信清理内存图表动画(解决surfaceView屏幕闪烁问题)demo实例详解...

    最近接了一个项目其中有功能要实现一个清理内存,要求和微信的效果一样.于是想到用surfaceView而不是继承view.下面小编给大家解析下实现思路. surfaceView是为了解决频繁绘制动画产生 ...

  9. 【Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题

    . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19698511 . 最近遇到了一系列的屏幕适配问题, 以及 ...

最新文章

  1. Async Mode: Future使用
  2. matlab uicontrol中popupmenu(弹出式菜单)用法,用于显示不同的函数
  3. LeetCode 1636. 按照频率将数组升序排序(哈希+排序)
  4. 测绘工程所用软件评析
  5. UI必不可少!手机计算器界面设计可学习案例
  6. HTML超文本标记语言(八)——表单form
  7. 史**_python保存为txt
  8. (转) 三袋米的故事
  9. docker安装redis提示没有日记写入权限_Docker 从入门到掉坑
  10. 超级详细的Vmware下载与安装过程
  11. 10.1 Python图像处理之边缘算子-Sobel算子、Roberts算子、拉普拉斯算子、Canny算子、Prewitt算子、高斯拉普拉斯算子
  12. 使用Cisco思科模拟器进行三层交换机配置
  13. Keil5 程序下载到RAM中并运行,
  14. mysql数据丢失原因_分析mysql数据丢失的问题
  15. 【windows服务器使用cwRsync实时同步】
  16. 服务器 控制台 的作用是,电脑中的MMC控制台的作用和用法是什么?
  17. stc单片机如何用C程序将IO口设为强推挽输出
  18. win10软件拒绝访问删不掉_Win10文件夹无法访问拒绝访问怎么解决?
  19. mysql win10 msi下载_Windows10 MYSQL Installer 安装 (msi 安装)
  20. 联想台式机重装系统方法总结

热门文章

  1. 将coreldraw文档以html,国家信息化(CEAC)试题集Coreldraw.doc
  2. CMD命令大全和如何使用cmd编写c++程序
  3. linux bios密码设置时间,如何设置BIOS密码
  4. nginx 根据请求头判断是安卓还是webq
  5. 网桥、交换机和路由器
  6. StringBuilder StringBuffer 如何清空
  7. 深度学习(2)——生成对抗网络
  8. Archery 系统配置 SQL优化审核平台配置【详解】
  9. 【word】Word设置页码不连续、公式与字体对齐、图表索引
  10. Intellij IDEA中file size exceeds configured limit解决