Android 自定义view 小细节处理

来源:互联网 发布:域名续费期可以过户吗 编辑:程序博客网 时间:2024/06/10 04:41

Android 自定义view 小细节处理

俗话说的好:好记性不如烂笔头啊。的确如此,在这么多年的开发中,有些东西一直记,有些东西也在一直忘。需要反复的去看,去理解。但是当你会过头来的时候,会发现,你又会对以前的东西有些认知,不仅会带你回忆当时为什么会这样想的,而且,还会对你现在的思维架构产生影响,所以很多人写博客,不光是为了给别人分享,而且还有对自己的共勉,小弟不才,文章写的不好,有些思维逻辑性跳跃大的话,还请见谅。

Android中自定义View,一般都是重写几个重要的方法,比如:

  • onDraw()

  • onMeasure()

  • onLayout()

  • Layout()

今天咱们说一下在onDraw 中的一些细节。


在onDraw 一开始的时候,整个屏幕都是画布,而且在最左上方,是画布的一个原点,坐标为(0,0),向右是x轴,为正轴,向下是y轴,为正轴,如果此时调用了 canvas.traslate(x,y)方法,是移动的画布的一个坐标系,并不是移动的整个画布,举一个例子:我在画布上画了个弧度,然后此时调用canvas.traslate(x,y)方法,原来弧度的位置是不会再变了,下次画笔的起始位置就是移动后的位置,看图说话。

移动之前的位置

                        移动之前的位置

然后我修改了代码 在画完内圆的时候,移动了画布的坐标系,xy分别为10


移动之后的位置

                         移动之后的位置 

所以总结
画布移动的是坐标系。可以参考下 canvas变换与操作


讲的比较乱,既然说了移动的是坐标系,那咱们再来说下坐标系的问题。


这个主要体现在画弧度的时候
  RectF rectF = new RectF(-radius, -radius, radius, radius);  //画弧度  canvas.drawArc(rectF, startAngle, sweepAngle, false, paint);
    startAngle 起始角度,sweepAngle 是扫过的简单,sweepAngle>0的话为顺时针旋转,小于0为逆时针旋转。大家估计要问了 0度在哪个位置?我这不会画图 就口述吧。0度的位置其实和数学系中的坐标一样的,只不过

在常见的数学坐标系中角度增大方向为逆时针,

在默认的屏幕坐标系中角度增大方向为顺时针

参考文章安卓自定义View基础-角度与弧度

这一篇写的不错,专门介绍了角度和弧度之间的关系

先写到这里吧,谢谢 !
这才发现原来写博客是件不容易的问题啊。

0 0