Android Training - 创建自定义的Views(Lesson 2 - 自定义Drawing)
来源:互联网 发布:淘宝哪家女生衣服好看 编辑:程序博客网 时间:2024/05/20 10:11
自定义view的最重要的一个部分是自定义它的外观。根据你的程序的需求,自定义绘制动作可能简单也可能很复杂。这节课会演示一些最常见的操作。
Override onDraw()
重绘一个自定义的view的最重要的步骤是重写onDraw()方法。onDraw()的参数是一个Canvas对象。Canvas类定义了绘制文本,线条,图像与许多其他图形的方法。你可以在onDraw方法里面使用那些方法来创建你的UI。
在你调用任何绘制方法之前,你需要创建一个Paint对象。
Create Drawing Objects
android.graphics framework把绘制定义为下面两类:
- 绘制什么,由Canvas控制
- 如何绘制,由Paint控制
例如Canvas提供绘制一条直线的方法,Paint提供直线颜色。所以在绘制之前,你需要创建一个或者多个Paint对象。
刚开始就创建对象是一个重要的优化技巧。Views会被频繁的重新绘制,初始化许多绘制对象需要花费昂贵的代价。在onDraw方法里面创建绘制对象会严重影响到性能并使得你的UI显得卡顿。
Handle Layout Events
为了正确的绘制你的view,你需要知道view的大小。复杂的自定义view通常需要根据在屏幕上的大小与形状执行多次layout计算。你不应该去估算这个view在屏幕上的显示大小。即使只有一个程序会使用你的view,仍然是需要处理屏幕大小不同,密度不同,方向不同所带来的影响。
尽管view有许多方法是用来计算大小的,但是大多数是不需要重写的。如果你的view不需要特别的控制它的大小,唯一需要重写的方法是onSizeChanged()).
onSizeChanged(),当你的view第一次被赋予一个大小时,或者你的view大小被更改时会被执行。在onSizeChanged方法里面计算位置,间距等其他与你的view大小值。
如果你想更加精确的控制你的view的大小,需要重写onMeasure())方法。这个方法的参数是View.MeasureSpec,它会告诉你的view的夫控件的大小。那些值被包装成int类型,你可以使用静态方法来获取其中的信息。
上面的代码有三个重要的事情需要注意:
- 计算的过程有把view的padding考虑进去。这个在后面会提到,这部分是view所控制的。
- 帮助方法resolveSizeAndState()是用来创建最终的宽高值的。这个方法会通过比较view的需求大小与spec值返回一个合适的View.MeasureSpec值,并传递到onMeasure方法中。
- onMeasure()没有返回值。它通过调用setMeasuredDimension()来获取结果。调用这个方法是强制执行的,如果你遗漏了这个方法,会出现运行时异常。
Draw!
每个view的onDraw都是不同的,但是有下面一些常见的操作:
- 绘制文字使用drawText()。指定字体通过调用setTypeface(), 通过setColor()来设置文字颜色.
- 绘制基本图形使用drawRect(), drawOval(), drawArc(). 通过setStyle()来指定形状是否需要filled, outlined.
- 绘制一些复杂的图形,使用Path类. 通过给Path对象添加直线与曲线, 然后使用drawPath()来绘制图形. 和基本图形一样,paths也可以通过setStyle来设置是outlined, filled, both.
- 通过创建LinearGradient对象来定义渐变。调用setShader()来使用LinearGradient。
- 通过使用drawBitmap来绘制图片.
学习自:http://developer.android.com/training/custom-views/custom-drawing.html,请多指教,谢谢!
转载请注明出自http://kesenhoo.github.com,谢谢配合!
- Android Training - 创建自定义的Views(Lesson 2 - 自定义Drawing)
- 【Android Training UI】创建自定义Views(Lesson 2 - 自定义Drawing)
- Android Training - 创建自定义的Views(Lesson 4 - 优化Views)
- 【Android Training UI】创建自定义Views(Lesson 0 - 章节概览)
- Android Training - 创建自定义的Views(Lesson 1 - 创建一个View类)
- 【Android Training UI】创建自定义的Views(Lesson 3 - 处理View的交互性)
- 【Android Training UI】创建自定义的Views(Lesson 4 - 优化View的性能)
- Android Training - 创建自定义的Views(Lesson 3 - 处理View的交互性)
- 【Android Training UI】创建自定义Views(Lesson 1 - 创建一个View类)
- 【Android Training - UserInfo】记住登入用户的信息[Lesson 3 - 创建自定义的账户]
- Android官方开发文档Training系列课程中文版:创建自定义View之View的创建
- android自定义View_1——Custom Drawing
- Android官方开发文档Training系列课程中文版:创建自定义View之View的绘制
- Android官方开发文档Training系列课程中文版:创建自定义View之View的交互
- Android官方开发文档Training系列课程中文版:创建自定义View之View的优化
- Android 自定义View之自定义绘制(Custom Drawing)
- 【Android Training - 03】使用Fragments建立动态的UI [ Lesson 3 - 创建灵活可变的UI ]
- 【Android Training - 03】使用Fragments建立动态的UI [ Lesson 3 - 创建灵活可变的UI ]
- 第26篇 jQuery 快速学习下
- 漫谈计算摄像学 (二):利用光场实现“先拍照后对焦”
- sql server 小计汇总的实现
- android 各国时区
- javaweb学习总结(五)——Servlet开发(一)
- Android Training - 创建自定义的Views(Lesson 2 - 自定义Drawing)
- Android中常用控件分类总结
- Get请求 Post请求
- 笔记十二(绘制一)
- Struts2声明式验证
- Android Training - 创建自定义的Views(Lesson 3 - 处理View的交互性)
- hdu 5481 离散化
- win7+ubuntu Kylin 15.10融合之路很简单...so easy
- Linux下shell脚本启动jar包