关闭

View的坐标系

229人阅读 评论(0) 收藏 举报

1. left,right,top,bottom

这四个属性决定了一个view的位置。view总是要摆放在一个容器中,因此这四个属性的值是相对于其父容器的左上角而言的。即,view的left为100px,意味着距离父容器的左上角横坐标为100个像素,view的top为100px,意味着距离父容器左上角纵坐标为100个像素。而view的rigth为left+view的width,bottom为view的top+view的height。其中widht和height可以通过view的getWidth和getHeight方法获得。

2. translation、translationY属性

这个属性添加自Android 3.0之后。

如果我们要改变一个View在父容器中的位置,可以增加这个View的外边距。例如,将view向右移动300px,可以增加view的左外边距300px。

MarginLayoutParams params = (MarginLayoutParams)view.getLayoutParams();

params.leftMargin += 300;

view.setLayoutParams(params);

此时view会向右移动300px,同时view的left属性值也会在原值基础上增加300px。

在引入了translationX和translationY这两个属性后,通过设置这两个值同样可以引起view 的移动,translationX意思是将view水平移动到距离view的left多远的地方。例如将view的translationX设置为300px,意味着将view移动到距离left 300px的位置。此时需要注意三个事情:

1)view确实移动了,且距离原先的位置300px

2)view的left没有改变。因为改变的是translatioinX属性值,并没有改变left值。

3)因为left的值没有改变,所以再次设置translationX为300px时,view是不会动的。因为此时view已经距离left为300px了,即此时的translationX的值已经是300px了。

3. x,y属性

与translationX和translationY一起新增的属性还有x和y。其中:

x = left + translationX

y = top + translationY

另外还需要注意View的x、y与MotionEvent的x、y不要搞混了

4. scrollX、scrollY属性

视图大小与视图要显示的内容大小可以是不一样的。最常见的比如ImageView,当遇到图片与ImageView尺寸不一致时,ImageView会以缩放的方式用来显示图片,比较常用的就是fitXY,center等。View提供了scrollTo / scrollBy方法来移动View中显示的内容到指定的位置。而这个指定的位置就是scrollX和scrollY。其中scrollX代表着View的左侧边缘与内容的左侧边缘之间的距离。当View的左侧边缘在内容的左侧边缘左侧时,scrollX的值为负数,反之为正数;scrollY代表着View的顶部边缘与内容的顶部边缘之间的距离。当View的顶部边缘在内容的顶部边缘上方时,scrollY的值为负数,反之为正数。

将以上的内容用代码再进行一次描述:

布局文件:


这里为了避免屏幕密度问题,将度量单位使用的为px。ImageView加载了一幅200px*200px的纯色图片,ImageView还有一个深灰色的背景。

初始时屏幕的效果。


在代码中打印left、top、right、bottom、width和height


打印结果为:


用一个示意图来表示也就是:


接下来写一段通过设置translationX进行移动view的代码


当动画结束时,打印的结果是:


可以看到left没有改变,此时iv的translationX为300,x为400

此时如果再次执行上述代码,iv的位置是不会改变的。因为此时translationX已经是300了。

画一幅示意图来示意一下移动后的样子:


最后写一段代码来移动iv中的内容。iv中现在显示的是一幅200px*200px大小的图片a.jpg


执行后的打印结果为:


此时的效果为:


深灰色为iv的背景色,红色为移动后的iv中显示的内容。因为scrollTo里面给定的值为100,-100,即移动后的scrollX为100,iv的左侧边缘在图像左侧边缘的右侧100个像素;scrollY为-100,iv的顶部边缘在图像顶部边缘上方100个像素。

再给一幅示意图来示意一下此时iv和图像:


最后看一下scollTo方法的源代码:

其实scrollTo方法的主要作用就是给view的scrollX和scrollY两个属性赋值,赋的值就是参数中传入的两个int。然后将新赋值的scrollX,scrollY以及原先的scrollX和scrollY一并作为参数提交给onScrollChanged方法进行操作。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:65884次
    • 积分:1376
    • 等级:
    • 排名:千里之外
    • 原创:58篇
    • 转载:84篇
    • 译文:0篇
    • 评论:16条
    文章分类
    最新评论