从绘制圆弧思考定位

来源:互联网 发布:java界面美化 编辑:程序博客网 时间:2024/05/18 11:49

  
如下图所示,我想在屏幕的在150*150的小矩形中间画一个画弧。开始的时候我会去考虑
150*150的居中显示的圆心怎么拿到啊?是不是要根据手机尺寸来计算?半径也要自己去指

定。按这个计算来说,圆心坐标为(160,240),半径为75,但我见到的代码让我对这个想法
产生的怀疑。

  下面的自定义View代码中getWidth()=225,getHeight=225,我开始很奇怪,getWidth和
getHeight()得到的不是手机的尺寸吗?怎么会是这么个奇怪的值啊?宽高一样的!!
  后来我猜想,因为在xml配置文件中我设置的View为150*150dip,(对于HVGA)转化成像素
就是225pix。也就是150dip=225pix-->1dip=1.5pix。
  接着又有奇怪的事情:
  RadialGradient rg = new RadialGradient( x, y, y, Color.argb(255, 255, 0,

0),Color.argb(255, 0, 255, 0), TileMode.CLAMP);//渐变
  上面代码表明x = 1/2getWidth() == 112.5,y=1/2getHeigth()=112.5就是我们的圆心。
这与我们当时算的(160,240)是圆心不相符啊。另外,半径竟然和x,y相等。也就是说只
有这包含这个圆的矩形是从(0,0)-->(a,a)的才有可能圆心坐标值和半径值相等。

  为什么这么奇怪的设坐标设置却能画出我要的东西呢?我的理解是,对于自定义View来
说,如果在xml中指定了它的尺寸和位置。那么在View内部它的坐标轴不再是整个手机屏幕
了,而是给指定的那块区域。比如上面的例子:
  给自定义View在手机的某个区域分配了一个150dip*150dip(225pix*225pix)的区域,然后
在自定义View内部,这个区域就是它的全部。getWidth就是225,里面的内切圆圆心也就为
(getWidth()/2,getHeight()/2),内切圆的半径也就为getWidth()或getHeight()。这样的
相对坐标使我们定位更容易一些。