码迷,mamicode.com
首页 > 移动开发 > 详细

Android 自定义 view(三)—— onDraw

时间:2016-06-05 01:08:50      阅读:384      评论:0      收藏:0      [点我收藏+]

标签:

前言:

上一篇已经介绍了用自己定义的属性怎么简单定义一个view《Android 自定义view(二) —— attr 使用》,那么接下来我们继续深究自定义view,下一步将要去简单理解自定义view的两个比较重要的方法 onDraw(Canvas canvas) ,在探究 onDraw方法之前,我们必须先深入了解两个类Paint和Canvas 。

 

第一:认识Paint

在探究onDraw之前首先必须要认识两个类,这里给出非常不错的两个资料参考网站,我也是从这里得到想要知道的东西,简单的说这下面几篇文章已经够我们喝一壶了,这里我就不再献丑了

http://www.apihome.cn/api/android/Paint.html

http://www.cnblogs.com/aibuli/p/efef9d774df97c553a8a0c0c3495ba35.html?utm_source=tuicool&utm_medium=referral 

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1105/1907.html 

 

第二:认识Canvas

Canvas类简单理解就是表示一块画布,可以在上面画我们想画的东西

Canvas中的方法很多,Canvas可以绘制的对象有:

  • 弧线(arcs) canvas.
  • 填充颜色(argb和color)
  • Bitmap
  • 圆(circle和oval)
  • 点(point)
  • 线(line)
  • 矩形(Rect)
  • 图片(Picture)
  • 圆角矩形 (RoundRect)
  • 文本(text)
  • 顶点(Vertices)
  • 路径(path)

canvas.save();
canvas.restore();
canvas.translate(dx, dy);
canvas.rotate(degrees);
canvas.saveLayer(bounds, paint, saveFlags);

save():把当前的绘制的图像保存起来,让后续的操作相当于是在一个新的图层上的操作。 
restore():将sava()之前的图层和save之后的图层进行合并操作 
translate():画布平移 
rotate():画布旋转 
大家可能会有疑问,既然我们可以利用坐标系来定位画布中的所有坐标点,为什么还要画布平移和画布旋转的api呢?现在假设有这样一个需求,需要绘制一个仪表盘,而绘制仪表盘的刻度我们可以利用三角函数sin cos 来计算出相应的偏移角度,当然这对于数学学霸来说很easy,一般人而言就需要把三角函数的公式翻个遍了,所以谷歌工程师,为我们实现平移和旋转的api,遇到类似于仪表盘的效果是,只需要旋转当前画布就能实现相应的效果,为我们节省了计算量和工作量。

推荐文章:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html

Android 自定义 view(三)—— onDraw

标签:

原文地址:http://www.cnblogs.com/yishujun/p/5559917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!