<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. Sco Unixware 7.1.3企业版服务器安装视频教程

    Sco Unixware 7.1.3企业版服务器安装视频教程 UnixWare 7.1.3是最先进的工业标准Intel和AMD处理器系统运行平台.UnixWare 7.1.3是关键业务解决方案的可靠基 ...

  2. Linux下截图技巧

           在需要Linux显示图片的场合,最普通的方法,会考虑用数码相,或是用Vmware,或VPc来抓拍,这样以来会比较麻烦,Linux也自带了些工具例如Gimp,ksnapshot这里我介绍一 ...

  3. 初识Oracle中的正则表达式

    Oracle使用正则表达式离不开这4个函数: 1.regexp_like 2.regexp_substr 3.regexp_instr 4.regexp_replace  

  4. 抓包神器Fiddler之Https请求随心转

    随着AppleStore对APP的审核越来越严格,客户端请求服务端API的方式大多数都变更为了https,在更安全的同时又引起了另外一个问题——本地抓包开发调试的不便. 一般来说,我们在开发API的时 ...

  5. ios学习之旅---c语言函数

    1.函数的概述 C源程序是由函数组成的. 尽管在前面各章的程序中大都仅仅有一个主函数main(),但有用程序往往由多个 函数组成. 函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能. C语 ...

  6. SICP 习题 (1.39)解题总结

    SICP 习题1.39沿着习题1.37, 1.38的方向继续前行,要求我们依据德国数学家J.H.Lambert的公式定义tan-cf过程,用于计算正切函数的近似值. J.H.Lambert的公式例如以 ...

  7. webservie授权调用

    Dim usercode As String = System.Configuration.ConfigurationSettings.AppSettings("SAPWebServiceU ...

  8. Linux下软件安装

    1.apt-get安装 自动下载依赖包.全程自动安装.但不能指定安装的位置 xiaohuang@xiaohuang-virtual-machine:~$ sudo apt-get install sl ...

  9. 蚂蚁金服入股36Kr给我的一点警示:应该相信自己的理性分析,不能盲目迷信权威

    最近3年,关注互联网和创业投资比较多,每周都会关注下本周发生的创业投融资大事件. 我注意到,一些自媒体作者经常会发布一些有"前瞻性"的文章,比如"美团大众要合并了&quo ...

  10. ajax实现简单的点击左侧菜单,右侧加载不同网页

    实现:ajax实现点击左侧菜单,右侧加载不同网页(在整个页面无刷新的情况下实现右侧局部刷新,用到ajax注意需要在服务器环境下运行,从HBuilder自带的服务器中打开浏览效果即可) 原理:ajax的 ...