前面写了个View画圆弧,为了让他和底层图片效果融合,采用先把圆弧画到和图片一样大小的画布上,然后用canvas的变换位图方法映射过去。

        bitmapWithReflection = Bitmap.createBitmap(swidth, sheight, Config.ARGB_8888);
canvas_bm = new Canvas(bitmapWithReflection);
canvas_bm.drawArc(oval, -, ((float) progress / maxProgress) * , false, deafaultPaint); // 绘制进度圆弧,这里是蓝色
canvas.drawBitmap(bitmapWithReflection, new Rect(, , swidth, sheight), rect, null);

可是通过traceView分析到,ViewRootImpl.onDraw函数平均时间为72.808那是远大于16,卡是必然的,我们发现里面的自定义view的onDraw函数时间就达24ms之多,主要是在createBitmap和gc上耗时较大。

跟踪ImageView的fill_center模式,发现他并没有耗时这么长,原来它直接用matrix对canvas进行变换,省去了上述两个最耗时的操作。

        canvas.save();
matrix = new Matrix();
matrix.setRectToRect(oval_src, rect, ScaleToFit.CENTER);
canvas.concat(matrix);
canvas.drawArc(oval, -90, ((float) progress / maxProgress) * 360, false, deafaultPaint); // 绘制进度圆弧,这里是蓝色
canvas.restore();

这里的自定义view ondraw函数时间不到1ms减小了很多,目前RootView时间为48ms,还是卡,有待进一步优化。

后续:

整了一下午,写了个测试程序,使用的属性动画,底层可以看到是调用openGL的交换缓冲区实现,onDraw控制在14毫秒左右;

可我自己的程序删减得代码都一样了,底层始终在调imageView的draw bitmap,它的时间就在30秒以上,那个伤心呀。

后面准备把测试程序的activity弄过来一步一步加看到底怎么回事,弄过来才发现,好好的代码时间也在30毫秒以上了。

看AndroidManifest.xml发现一个是sdk 11一个是14,修改过来,现在的时间在21毫秒了,效果还是有提过的,离16毫秒越来越近了。

View优化的更多相关文章

  1. List view优化

    ListView 针对每个item,要求 adapter "返回一个视图" (getView),也就是说ListView在开始绘制的时候,系统首先调用getCount()函数,根据 ...

  2. (转) Android开发性能优化简介

    作者:贺小令 随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要求远远高于PC的桌面应用程序.以上理由,足以 ...

  3. [素材资源] Android开发性能优化简介(非常不错的)

    转自(http://www.starming.com/index.php?action=plugin&v=wave&tpl=union&ac=viewgrouppost& ...

  4. 转载:【译】Android: 自定义View

    简介 每天我们都会使用很多的应用程序,尽管他们有不同的约定,但大多数应用的设计是非常相似的.这就是为什么许多客户要求使用一些其他应用程序没有的设计,使得应用程序显得独特和不同. 如果功能布局要求非常定 ...

  5. 关于android应用--内存的优化

    以下内容为转载自网上,然后自己加工贴合到一块的: 原文地址:http://www.cnblogs.com/frydsh/archive/2012/12/09/2810601.html http://w ...

  6. Android APP 性能优化的一些思考

    说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...

  7. android自定义View的绘制原理

    每天我们都会使用很多的应用程序,尽管他们有不同的约定,但大多数应用的设计是非常相似的.这就是为什么许多客户要求使用一些其他应用程序没有的设计,使得应用程序显得独特和不同. 如果功能布局要求非常定制化, ...

  8. iOS性能优化技巧

    通过静态 Analyze 工具,以及运行时 Profile 工具分析性能瓶颈,并进行性能优化.结合本人在开发中遇到的问题,可以从以下几个方面进行性能优化. 一.view优化 1.不透明的View 设置 ...

  9. Android app 性能优化的思考--性能卡顿不好的原因在哪?

    说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...

随机推荐

  1. jQuery iframe之间相互调用

    ,子iframe内调用父类函数方法: window.parent.func(); ,子Iframe中获取父界面的元素: $("#xx", window.parent.documen ...

  2. oracle SQLPLUS 常用set设置

    SQL>set colsep' '; //-域输出分隔符 SQL>set echo off; //显示start启动的脚本中的每个sql命令,缺省为on SQL> set echo ...

  3. ios AFNetworking 3.0 报错 : *** Assertion failure in -[AFHTTPRequestSerializer requestWithMethod:URLString:parameters:error:],

    AFNetWorking[:] *** Assertion failure -- :::] *** Terminating app due to uncaught exception 'NSInter ...

  4. qt小问题

    QT如何实现不点击鼠标就能触发 mouseMoveEvent(QMouseEvent *e):setMouseTracking(true) QTableView如何实现单击事件:不需要重写单击事件,而 ...

  5. Ubuntu 安装 mysql 并修改数据库目录

    . . . . . 今天折腾了一下午的时间,恢复了无数次虚拟机快照,终于在 Ubuntu 上把 mysql 安装好了. mysql 是从官网下载的:mysql-server_5.7.16-1ubunt ...

  6. Vue 过滤器与计算属性

    过滤器 V1.x 版本 过滤器基础 过滤器是一个通过输入数据,能够及时对数据进行处理并返回一个数据结果的简单函数.Vue有很多很便利的过滤器,可以参考官方文档,http://cn.vuejs.org/ ...

  7. Oracle Cursor

    1.概念 游标:从字面来理解就是游动的光标.用数据库语言来描述,游标是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了.将游标放置到某行后,即可对该行数据进行操作, ...

  8. ABAP 动态内表添加单元格颜色字段

    *动态内表alv显示时要求某些单元格显示颜色 *wa_fldcat-datatype不能添加LVC_T_SCOL类型,在创建好内表之后,再添加颜色列. DATA: wa_fldcat TYPE lvc ...

  9. vs命令行采集性能数据

    VSPerfASPNETCmd /output:d://PerformanceReport.vsp http://localhost/store/cart.aspx

  10. JavaScript基础知识整理(1)

    粗略理解,努力入门中 1.在html中引入外部脚本:  <script src="filename.js"></script> 2.注释:  多于一行的长注 ...