android绘制屏幕闪烁,Android画图避免屏幕闪烁
在处理一些复杂的界面时,往往要用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画图避免屏幕闪烁相关推荐
- android绘制黑色画面,Android音视频技术入门之绘制一张图片
Android 的音视频入门学习,首先了解一下绘制图片.在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View作绘制图片.下 ...
- android 绘制控件,Android自定义控件绘制基本图形基础入门
本文讲述绘制Android自定义各种图形效果,为自定义控件的入门篇 相关视频链接: 绘制点–这个控件只需要在布局中引用或者代码中new 即可,下面几个绘制只展示onDraw方法 package com ...
- android 绘制心率曲线图,Android 特效View第四弹之折线图 心率图
Android 特效View第四弹之折线图 心率图 android:layout_width="match_parent" android:layout_height=" ...
- android绘制心形,Android中的心形按钮
I have this application that I am working on and the user can mark some items as a favorite. I want ...
- android绘制论文,基于Android平台的三维地形绘制研究与实现
摘要: 地形是一种常见的三维场景,也是三维场景的重要组成部分,地形数据的实时绘制在PC端已经有大量研究,但如何实现移动端大规模地形的实时绘制是一个新问题.目前,移动端设备硬件性能发展迅速,但在移动端地 ...
- android绘制五环图形,Android使用Canvas实现奥运五环
Canvas的drawXXX方法配合使用Paint可以实现圆点.圆.弧形和曲线等各种颜色的图形,本文将使用drawArc(@NonNull RectF oval, float startAngle, ...
- Android绘制波浪线 进阶
前言 在我的上一篇博客中,我讲解了如何绘制一条波浪线,今天我们的目的是,绘制一条随心所欲的波浪线,什么叫随心所欲的波浪线呢,由于上篇主要讲解的是绘制波浪线的原理,不过就有人提问了,万一我想要的波浪线长 ...
- android 清理缓存动画,Android仿微信清理内存图表动画(解决surfaceView屏幕闪烁问题)demo实例详解...
最近接了一个项目其中有功能要实现一个清理内存,要求和微信的效果一样.于是想到用surfaceView而不是继承view.下面小编给大家解析下实现思路. surfaceView是为了解决频繁绘制动画产生 ...
- 【Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题
. 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19698511 . 最近遇到了一系列的屏幕适配问题, 以及 ...
最新文章
- Async Mode: Future使用
- matlab uicontrol中popupmenu(弹出式菜单)用法,用于显示不同的函数
- LeetCode 1636. 按照频率将数组升序排序(哈希+排序)
- 测绘工程所用软件评析
- UI必不可少!手机计算器界面设计可学习案例
- HTML超文本标记语言(八)——表单form
- 史**_python保存为txt
- (转) 三袋米的故事
- docker安装redis提示没有日记写入权限_Docker 从入门到掉坑
- 超级详细的Vmware下载与安装过程
- 10.1 Python图像处理之边缘算子-Sobel算子、Roberts算子、拉普拉斯算子、Canny算子、Prewitt算子、高斯拉普拉斯算子
- 使用Cisco思科模拟器进行三层交换机配置
- Keil5 程序下载到RAM中并运行,
- mysql数据丢失原因_分析mysql数据丢失的问题
- 【windows服务器使用cwRsync实时同步】
- 服务器 控制台 的作用是,电脑中的MMC控制台的作用和用法是什么?
- stc单片机如何用C程序将IO口设为强推挽输出
- win10软件拒绝访问删不掉_Win10文件夹无法访问拒绝访问怎么解决?
- mysql win10 msi下载_Windows10 MYSQL Installer 安装 (msi 安装)
- 联想台式机重装系统方法总结
热门文章
- 将coreldraw文档以html,国家信息化(CEAC)试题集Coreldraw.doc
- CMD命令大全和如何使用cmd编写c++程序
- linux bios密码设置时间,如何设置BIOS密码
- nginx 根据请求头判断是安卓还是webq
- 网桥、交换机和路由器
- StringBuilder StringBuffer 如何清空
- 深度学习(2)——生成对抗网络
- Archery 系统配置 SQL优化审核平台配置【详解】
- 【word】Word设置页码不连续、公式与字体对齐、图表索引
- Intellij IDEA中file size exceeds configured limit解决