android中view坐标相关的知识
来源:互联网 发布:电子发票打印软件 编辑:程序博客网 时间:2024/04/30 06:04
基本概念:
Android坐标系:以屏幕左上角为坐标原点,向右为x的正轴,向下为y的正轴。
视图坐标系:以父视图的左上角为坐标原点,向右为x的正轴,向下为y的正轴。
一、View中获取坐标相关的函数
注意:在onCreate方法中是不能获取到坐标的。
1、getX() getY()
这个是view左上角距离父布局的距离,而且这个距离可能会变化,比如使用动画将view移动的时候,这两个坐标就会发生变化。
2、getTranslationX() getTranslationY()
view相对于最初位置的变化量。始终是相对于最初的位置。
同时我们也可以使用set方法比如setTranslationX来动态改变view的位置。所以这一组坐标存在的意义就是为了view的位置变化使用的。
3、getLeft() getTop() getRight() getBottom()
这四个坐标是指一个view的边际距离父布局的距离。Getleft()和getRight()是相对父布局的左边,而getTop()和getBootom()是相对于父布局的上边。所以我们通过这四个值是可以知道view的宽度和高度的。
这三组坐标的关系:getX()= getTranslationX()+getLeft()
4、getPivotX() getPivotY()
view旋转和缩放的时候的中心点
二、MotionEvent中的坐标
1、getX(),getY()
获取视图坐标系中的坐标
2、getRawX(),getRawY()
获取android坐标系中的坐标
以上的四个方法不分view和viewgroup,但是如果是activity中重写onTouchEvent(),则获取到的getX()和getRawX(),getY()和getRawY()是相同的。经过实际测试,activity中根布局在有titlebar的情况下getY()和getRawY()有一个状态栏高度的差距,这也很好理解,因为我们认为的根布局其实外面还有一层FrameLayout,所以我们认为的根布局获取的getY()是在这个FrameLayout坐标系中的坐标。
三、解决在onCreate(),onStart(),onResume()中无法获取view的坐标值的问题。
原因分析:view的measure()的调用与Activity的生命周期不是同步的,所以在生命周期的某个函数中不能保证view已经mearure和Layout完毕。
解决方法(参考任玉刚的书):
1、 在onWindowFocusChanged方法中调用
这个方法表示window焦点的变化,当这个方法被调用时view已经初始化完毕了,自然也就能获取到view的坐标了,缺点:但是这个方法会在焦点发生变化的时候调用,也就会存在多次调用,这点需要注意。
2、 利用view.post(runnable)
这样会把runnable放在一个队列中,view初始化完成的时候就会进行处理,示例代码如下:
view.post(new Runnable(){ @Override public void run() { int width=view.getLeft(); }});
3、利用ViewTreeObserver
在ViewTreeObserver中很多监听的回调中都可以实现对view的宽高和坐标的获取。
- android中view坐标相关的知识
- 坐标相关的android应用程序中获取view的位置
- Android中View的相关知识(3)
- Android中View的相关知识(4)
- Android中View的相关知识(5)
- Android中View的相关知识(6)
- Android中View的相关知识(7)
- Android中View的相关知识(8)
- Android中View坐标
- Android坐标相关知识纪要
- 收集整理 View必须要了解的Android坐标知识
- 收集整理 View必须要了解的Android坐标知识
- Android中View的坐标矩形获取
- web中使用到的一些关于坐标相关知识
- android中View坐标学习
- android中View坐标学习
- android中View坐标学习
- android中View坐标学习
- Android 5.0 自定义dialog 背景不透明解决方法
- Android smali 语法二
- mac 快捷键 chrome切换tab
- POJ 3253 Fence Repair 优先队列
- readlink函数:获取程序的运行路径
- android中view坐标相关的知识
- IOS开发源码阅读篇--FMDB源码分析1(FMResultSet)
- 9轴传感器学习
- dismissViewControllerAnimated 退两层controller
- Examples of Bumblebee2 Calibration File
- 【Servlet】Hello World
- android shape的使用
- 深入浅出UML类图
- VB.net2008实例 编写文字加解密程序