<span style="font-size:14px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">醉醉哒</span>

 

相信有创建过“自己定义View”经验的众多的开发人员朋友其中有相当一部分人猿友是直接copy网上的一些代码拿来用,结果往往不尽如人意。碰到bug或者是需求发生变化时往往手忙脚乱。android自己定义View你真的知道么???

本文主要是整理介绍一下“自己定义View"的 一些easy踩坑的地方和一些优化。其中包含自己定义属性、手势交互以及优化自定View的具体点。这边可能须要读者们对"怎样创建一个自己定义View"有一定的了解或者实践。至于还没接触过自己定义View的读者们能够查看官网:http://developer.android.com/intl/zh-cn/training/custom-views/create-view.html(需翻墙)里面介绍得非常具体。


在此之前我们说说自己定义View 你一定须要知道的知识点:

1. invalidate():当view的某些内容发生变化的时候,须要调用invalidate来通知系统对这个view进行redraw http://developer.android.com/intl/zh-cn/reference/android/view/View.html#invalidate(

2.  requestLayout(:当某些元素变化会引起组件大小变化时,须要调用requestLayout方法 http://developer.android.com/intl/zh-cn/reference/android/view/View.html#requestLayout( ;

3.View的三大绘制流程:onMeasure()、onLayout()、onDraw();

4. 手势辅助类:GestureDetector、ViewDragHelper、Scrollerhttp://developer.android.com/intl/zh-cn/reference/android/view/GestureDetector.htmlhttp://www.cnblogs.com/sw926/p/3208158.html;http://blog.csdn.net/pi9nc/article/details/39583377;http://blog.csdn.net/gemmem/article/details/7321910。

5.  Android中自己定义属性的格式具体解释

6. Paint Canvas 

自己定义VIew具体调优建议:

1. 在Gradleproject中,始终使用 http://schemas.android.com/apk/res-auto的自己定义属性,然而在官网中没有提到这个:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

2. 假设你的view是一个inner class。你必须指定这个view的outer class。

相同的,假设PieChart有一个inner
class 叫做PieView。

为了使用这个类中自设的属性。你应该使用com.example.customviews.charting.PieChart$PieView.

3. 在属性定义时指定多种类型值。比方说 我设置VIew的背景能够是“@drawable/图片ID”也能够是“#00FF00”如:

<attr name = "background" format = "reference|color" />

4. 使用obtainStyledAttributes() 来获取属性值 ,这样就不用推断 我的属性设置的是实际数据“str/#color”还是“@resID”了,使用方法如:

 TypedArray a = context.getTheme().obtainStyledAttributes(
attrs,
R.styleable.PieChart,
0, 0);
try {
mShowText = a.getBoolean(R.styleable.PieChart_showText, false);
mTextPos = a.getInteger(R.styleable.PieChart_labelPosition, 0);
} finally {
a.recycle();
}

清注意TypedArray对象是一个共享资源,必须被在使用后进行回收。

5. 发生动态行为时採用invalidate()
 and  
requestLayout()

6. android:contentDescription属性标记输入字段 与sendAccessibilityEvent()在适当的时候通过调用发送訪问事件。參考:http://developer.android.com/intl/zh-cn/guide/topics/ui/accessibility/apps.html#custom-views和 Android无障碍服务  让应用具有辅助性服务.

7. 初始化时创建对象;不要在onDraw方法内创建绘制对象;

8. 让View支持 wrap_content  和  padding;

9.使用手势监听处理UI交互:GestureDetector

10.使用过渡平滑:property
animation framework

12.另外尽可能的降低绘制 即调用OnDraw();大多数时候导致onDraw都是由于调用了invalidate().因此请尽量降低调用invaildate() 的次数。假设可能的话,尽量调用 含有4个參数的invalidate() 方法而不是没有參数的invalidate()。没有參数的invalidate会强制重绘整个view。

13.另外一个非常耗时的操作是请求layout。不论什么时候运行requestLayout(),会使得Android UI系统去遍历整个View的层级来计算出每个view的大小。假设找到有冲突的值,它会须要又一次计算好几次。另外须要尽量保持View的层级是扁平化的,这样对提高效率非常有帮助。

14.使用硬件加速  http://developer.android.com/intl/zh-cn/guide/topics/graphics/hardware-accel.html

15. 状态的存储与恢复:假设内存不足。而恰好我们的Activity置于后台,不幸被重新启动,或者用户旋转屏幕造成Activity重新启动,我们的View应该也能尽可能的去保存自己的属性。

--------------------------------------------------------------------------------------------------------------------

Ps:编辑器太难用了。太难用了。严重打击了我的写博客的欲望. 

自己定义View——坑、技巧、调优的更多相关文章

  1. 如何合理的规划一次jvm性能调优

    https://blog.csdn.net/miracle_8/article/details/78347172 摘要: JVM性能调优涉及到方方面面的取舍,往往是牵一发而动全身,需要全盘考虑各方面的 ...

  2. 如何合理的规划jvm性能调优

    JVM性能调优涉及到方方面面的取舍,往往是牵一发而动全身,需要全盘考虑各方面的影响.但也有一些基础的理论和原则,理解这些理论并遵循这些原则会让你的性能调优任务将会更加轻松.为了更好的理解本篇所介绍的内 ...

  3. jvm调优原则

    合理规划jvm性能调优 JVM性能调优涉及到方方面面的取舍,往往是牵一发而动全身,需要全盘考虑各方面的影响.但也有一些基础的理论和原则,理解这些理论并遵循这些原则会让你的性能调优任务将会更加轻松.为了 ...

  4. 【java虚拟机】jvm调优原则

    转自:https://www.cnblogs.com/xiaopaipai/p/10522794.html 合理规划jvm性能调优 JVM性能调优涉及到方方面面的取舍,往往是牵一发而动全身,需要全盘考 ...

  5. 性能调优之提高 ASP.NET Web 应用性能的 24 种方法和技巧

    性能调优之提高 ASP.NET Web 应用性能的 24 种方法和技巧   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对 ...

  6. iOS-------应用性能调优的25个建议和技巧

    性能对 iOS 应用的开发尤其重要,如果你的应用失去反应或者很慢,失望的用户会把他们的失望写满App Store的评论.然而由于iOS设备的限制,有时搞好性能是一件难事.开发过程中你会有很多需要注意的 ...

  7. iOS应用性能调优的25个建议和技巧

    本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/,你还可以 ...

  8. [转]iOS应用性能调优的25个建议和技巧

    写在前面 本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/ ...

  9. iOS应用性能调优的25个建议和技巧【转】

    转载自:http://blog.jobbole.com/37984/ 首页 最新文章 资讯 程序员 设计 IT技术 创业 在国外 营销 趣文 特别分享 更多 > - Navigation -  ...

随机推荐

  1. CSS盒子模型图

    下面这张图,是W3C标准的CSS盒子模型: 由上图可以清楚的看出各个部分的CSS属性.

  2. HDU 4731 Minimum palindrome 打表找规律

    http://acm.hdu.edu.cn/showproblem.php?pid=4731 就做了两道...也就这题还能发博客了...虽然也是水题 先暴力DFS打表找规律...发现4个一组循环节.. ...

  3. python 时间库的用法 时区的转化

    1. 月份的加减 https://blog.csdn.net/qq_18863573/article/details/79444094 第三方模块:python-dateutil import dat ...

  4. Flask框架简介

    Flask框架诞生于2010年,是Armin ronacher 用python语言基于Werkzeug工具箱编写的轻量级Web开发框架! Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展. ...

  5. Spring 实现数据库读写分离(转)

    现在大型的电子商务系统,在数据库层面大都采用读写分离技术,就是一个Master数据库,多个Slave数据库.Master库负责数据更新和实时数据查询,Slave库当然负责非实时数据查询.因为在实际的应 ...

  6. linux6.0系统如何安装portmap

    因为在6.0的系统里,portmap已经改名了.在Redhat或CentOS5中可以使用 service portmap start启动服务,然后在启动nfs服务,实现挂载. 6里面可是试试 serv ...

  7. 随时查看源码的网站---http://www.sooset.com/

    由于工作需要经常要在Windows平台下参阅linux源码,以前都用http://lxr.linux.no/来浏览源码(如下图所示),最近发现sooset来浏览更方便,所以介绍给大家分享. 650) ...

  8. react+react-router+mobx+element打造管理后台系统---react-amdin-element

    react-admin-element,一款基于react的后台管理系统. 那么我们和其他的后台管理系统有什么区别呢? demo地址:点我进入demo演示 github地址:点我进入github 1. ...

  9. BZOJ2631: tree(LCT)

    Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2 ...

  10. CISP/CISA 每日一题 10

    CISA 每日一题(答)一个合理建造的数据仓库应当支持下列三种基本的查询格式: 1.向上溯源和向下溯源——向上溯源是对数据进行总计:向下溯源是将数据进行细化: 2.交叉溯源——通过通用属性访问数据仓库 ...