view的几个基本属性的介绍
1.什么是view
个人认为view简单说就是所有view的基类所有的界面view归根到底就是view衍生来的。
2.view的位置参数
大家可以先参考下下面的图形介绍
根据此图我们获取控件的位置属性可以调用如下方法
Left=getLeft();
Right=getRight();
Top=getTop();
Bottom=getBottom();
我们给据介绍可以获取控件的宽高
width=Right-Left
height=Bottom-Top
我们如果获取控件的坐标该如何处理呢 看下面
x=getX();
y=getY();
这样我们就获取了控件的x,y的坐标,那么问题来了我们现在看x跟Left,y跟Top在图片上显示结果是一样的那他俩的区别又是什么?
请看下面图片的介绍
左面的图片是我们上面介绍的结果也就是getLeft() = getX()假如我们使用属性动画将图片右移,会出现什么结果请看下面的代码
ImageView imageView= (ImageView) findViewById(R.id.iv_main);
Log.e("位置 x",imageView.getX()+"");
Log.e("位置 left",imageView.getLeft()+"");
Log.e("位置 translate x",imageView.getTranslationX()+"");
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ImageView imageView= (ImageView) findViewById(R.id.iv_main);
Log.e("位置 x",imageView.getX()+"");
Log.e("位置 left",imageView.getLeft()+"");
Log.e("位置 translate x",imageView.getTranslationX()+"");
ObjectAnimator.ofFloat(imageView,"translationX",-300f).setDuration(1000).start();
}
});
我们来看打印日志
初始化时的打印日志
02-22 10:36:51.578 12405-12405/com.aaa E/位置 x: 0.0
02-22 10:36:51.578 12405-12405/com.aaa E/位置 left: 0
02-22 10:36:51.578 12405-12405/com.aaa E/位置 translate x: 0.0
点击一次后的打印日志
02-22 11:09:07.429 12405-12405/com.aaa E/位置 x: 258.0
02-22 11:09:07.429 12405-12405/com.aaa E/位置 left: 258
02-22 11:09:07.429 12405-12405/com.aaa E/位置 translate x: 0.0
再次点击后的打印日志
02-22 11:09:53.348 12405-12405/com.aaa E/位置 x: -42.0
02-22 11:09:53.348 12405-12405/com.aaa E/位置 left: 258
02-22 11:09:53.348 12405-12405/com.aaa E/位置 translate x: -300.0
在结果中我们发现2点
1.布局初始化的时候我们的控件位置是获取不到的
2.我们的left属性不会随着属性动画的改变而改变
3.最重要的 x = left + translatex
即 view.getX相当于该view距离父容器左边缘的距离,等于getLeft+getTranslationX。
在下一篇中我们会介绍view的事件分发机制来帮助我们更好的了解view。