<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. log大全

    http://www.iconfont.cn/search/index?q=%E6%88%91%E7%9A%84&page=3

  2. Python 3 与"Hello World!"

    Python 3 版本 Python的3.0版本,常被称为Python 3000,或简称Py3k.相对于Python的早期版本,这是一个较大的升级.为了不带入过多的累赘,Python 3.0在设计的时 ...

  3. Resource Access Based on Multiple Credentials

    A collection of multiple user credentials each associated with one of multiple different users is ob ...

  4. 洛谷 P1850 换教室

    P1850 换教室 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n2n 节课程安排在 nn 个时间段上.在第 ii(1 \leq ...

  5. jquery 04

    $('div').slice(1,3).css('background','red').end().css('color','blue');  入栈原理图: <!DOCTYPE HTML> ...

  6. js17---创建对象:构造函数式和原型组合模式、动态原型模式、稳妥构造函数式

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  7. R语言-上海二手房数据分析

    案例:通过分析上海的二手房的数据,分析出性价比(地段,价格,未来的升值空间)来判断哪个区位的二手房性价比最高 1.载入包 library(ggplot2) library(Hmisc) library ...

  8. ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)

    原文  http://blog.csdn.net/gubenpeiyuan/article/details/25618177   概要: 目前ONVIF协议家族设备已占据数字监控行业半壁江山以上,亲, ...

  9. webservie授权调用

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

  10. tooltip两个特殊的属性

    <body style="margin: 50px;"> <!--两个特殊的属性--> <div id="selection"&g ...