关于left,translationX,X
2015-08-27 22:42
169 查看
原本以为自己对这3个小东东的理解没什么问题,但最近的一个项目让我发现之前对这几个东东的理解真的存在误区,后来研究了一下,把结论拿出来分享一下。
1.left
left的意义就是“该视图左边界距其父元素左边界的距离”,我之前也是这么理解的,这个并没有错。然而,在此基础上,我之前还以为当视图的位置改变时,left的值会随之改变,这个并不准确。准确地来讲,“位置改变未必会引起left的值的变化,left值得变化会引起视图左边界的位置变化”。我们来看一个例子:
图1
图2
图中的数据描述的是那个蓝色的视图。我们发现,视图位置的变化并没有引起left值得变化(程序中是通过setX和setY来改变视图位置)。那么我们可以可以得出结论“left的值是视图的原始位置的左边界距其父元素的左边界的距离”。当然,后期我们也可以通过程序去改变left的值来改变左边界的位置,但要注意,严格来讲,这个并不能达到移动视图的效果(因为仅仅改变了左边界的位置),而且会引起视图宽度的变化。至于为什么会引起宽度变化,看一下View类的getWidth()方法即知:
2.translationX
这个很好理解,当我们通过setX来改变视图的位置的时候,translationX代表的就是视图距其原始位置在x轴方向移动的距离。
3.X
这个指的是视图左上角那个顶点的位置,不多说,直接看View类的代码:
1.left
left的意义就是“该视图左边界距其父元素左边界的距离”,我之前也是这么理解的,这个并没有错。然而,在此基础上,我之前还以为当视图的位置改变时,left的值会随之改变,这个并不准确。准确地来讲,“位置改变未必会引起left的值的变化,left值得变化会引起视图左边界的位置变化”。我们来看一个例子:
图1
图2
图中的数据描述的是那个蓝色的视图。我们发现,视图位置的变化并没有引起left值得变化(程序中是通过setX和setY来改变视图位置)。那么我们可以可以得出结论“left的值是视图的原始位置的左边界距其父元素的左边界的距离”。当然,后期我们也可以通过程序去改变left的值来改变左边界的位置,但要注意,严格来讲,这个并不能达到移动视图的效果(因为仅仅改变了左边界的位置),而且会引起视图宽度的变化。至于为什么会引起宽度变化,看一下View类的getWidth()方法即知:
public final int getWidth() { return mRight - mLeft; }
2.translationX
这个很好理解,当我们通过setX来改变视图的位置的时候,translationX代表的就是视图距其原始位置在x轴方向移动的距离。
3.X
这个指的是视图左上角那个顶点的位置,不多说,直接看View类的代码:
public float getX() { return mLeft + getTranslationX(); }
相关文章推荐
- 零基础学python-8.2 列表的基本操作、迭代和解析
- 零基础学python-8.2 列表的基本操作、迭代和解析
- redis-有序集合
- centOS linux 下PHP编译安装详解
- 数组中出现次数最多的K个数
- 黑马程序员---struts2学习笔记之九(模型驱动)
- Javascript高级程序设计第十、十一章
- JAVA问题总结之18-成员变量与局部变量
- 网页级在线性能测试网站汇总
- House Robber II
- 今天遇到的奇葩问题:Validation error messages from TagLibraryValidator for fmt
- iOS(总结)手势
- POJ3159 Candies(差分约束 PS:此题spfa+队列过不了,spfa + stack才能过)
- 为什么 呢
- OSI 七层协议
- centOS linux 下nginx编译安装详解
- nginx中http核心模块的配置指令3
- php+mysql留言板(模仿qq空间留言板)
- ubuntu搭建git服务器
- 性能测试培训总结-loadrunner测试mysql