您的位置:首页 > 移动开发 > Android开发

android 坐标获取与计算

2015-11-06 21:42 573 查看
1、概述android tv 的ui 很细。 很细就会涉及到的一些ui 元素  需要自己 写这里记录下坐标的获取2、指定view 的坐标(绝对坐标)获取 的四个方法
2.1 view.getLocationInWindow(int[2]) 
 返回view左上角的坐标,该坐标是包含了状态栏标题栏的高度(tv没有状态栏)
2.2 view.getLocationOnScreen(int[2])
  该方法效果与上面类似,没有使用
2.3 view.getGlobalVisibleRect
 简单的理解就是 整个屏幕的可见范围内的 canvas的坐标 (包含各种栏)比如720p 的屏幕。 rect.right <= 1280  rect.bottom<= 720  (屏幕打横着放)  其实是小于ViewGroup的边界值
2.4 view.getLocalVisibleRect
 用来判断 view 是否可见,是局部可见还是部分可见很方便获得的Rect 为相对自己的可视范围区域。Rect rect = new Rect();boolean reval = view.getLocalVisibleRect(rect);reval:当可视rect为empty的时候 返回false,也就是view 完全不可见的时候(一个角都看不到)rect 相对自己右上角顶点是[0,0] 左下角的是[w,h] 有局部不可见的时候 对应取看的到的值相对右上角顶点(0,0)的偏移量可见区域内:true [0, 0, width, height]  左边被遮挡:true [x,y,w,h] 右边被遮挡:true [0,0,x4,y4]全部被遮挡:false [0,0,0,0]gone false[0,0,0,0]效果图如下:
判断是否完全不可见用reval值判断判断是否局部可见,用rect[right, top, left, bottom]判断left >0 view左边在可视屏幕外 (或者父布局范围外看不到的地方)top >0 view上边在可视屏幕外right< width view右边在可视屏幕外bottom < height view下边在可视屏幕外view.getLocationInWindow(int[2])  返回左上角的坐标,该坐标是包含了状态栏标题栏的高度(tv没有状态栏),可以认为是整个屏幕的canvas的绝对坐标。(注canvas可以认为没用边界)在可见范围之外  依旧可以读到该值。比如local[0] = 3999 表示屏幕外在自定义ViewGroup时计算子View 是否在可见区域内时就要用该坐标判断view.getGlobalVisibleRect简单的理解就是 整个屏幕的可见范围内的 canvas的坐标 (当然就是包含各种栏)比如720p 的屏幕。 rect.right < 1280  rect.bottom< 720  (屏幕打横着放)  其实是小于ViewGroup的边界值ps:把这两个方法 getLocationInWindow getGlobalVisibleRect 用着,加上getWidth getHeight 可以满足屏幕和 容器子view 定位,判断view是否在ViewGroup的边界 。3、判断ViewGroup内的子view 是否在ViewGroup的可视范围边界内(2.3的方法更方便是后来补充上来的)
//viewGroup
Rect visibleRect = new Rect();
getGlobalVisibleRect(visibleRect);
//view
Rect focusVisibleRect = new Rect();
view.getGlobalVisibleRect(focusVisibleRect);
int[] focusL = new int[2];
view.getLocationInWindow(focusL);
3.1在右边(一部分在右边,和全部在右边  已经处理了边界值)
if ((focusL[0] + view.getWidth()) > visibleRect.right) {
3.2在左边(一部分在左边和全部在左边  已经处理了边界值)
 if ((focusL[0]) < visibleRect.left) {
3.3全部在右边:
focusL[0] > visibleRect.right
3.4一部分在右边 (不能避免的一个临界 视图结尾刚好卡到focusVisibleRect.right)
if (visibleRect.right == focusVisibleRect.right)
3.5在左边的方式 类比于右边
4、指定View 的 相对坐标  相对于上级的ViewGroup 坐标view 可以获取到自身在viewGroup中的上下左右4个点的位置如上图view 的 top left right bottom四个点的位置 可以用get方法得到(也就是其对应viewGroup的相对坐标)view.getTop view.getBottomview.getRight view.getLeft对于3中的 view 用这些函数取到的top left right 就是该view相对于viewgroup的绝对坐标了,在自定义滑块滑动距离的时候可以用到
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息