在Android中,我们有时候可能会将子View的坐标转换为父View中的坐标。感觉很有用,分享给大家。

在Launcher中有这么一段代码可以完成这项工作。
 public float getDescendantCoordRelativeToSelf(View descendant, int[] coord) {

        float scale = 1.0f;
        float[] pt = {coord[0], coord[1]};
                  //坐标值进行当前窗口的矩阵映射,比如View进行了旋转之类,它的坐标系会发生改变。map之后,会把点转换为改变之前的坐标。
        descendant.getMatrix().mapPoints(pt);
                 //转换为直接父窗口的坐标
        scale *= descendant.getScaleX();
        pt[0] += descendant.getLeft();
        pt[1] += descendant.getTop();
        ViewParent viewParent = descendant.getParent();
                  //循环获得父窗口的父窗口,并且依次计算在每个父窗口中的坐标
        while (viewParent instanceof View && viewParent != this) {
            final View view = (View) viewParent;
            view.getMatrix().mapPoints(pt);
            scale *= view.getScaleX();//这个是计算X的缩放值。此处可以不管
                           //转换为相当于可视区左上角的坐标,scrollX,scollY是去掉滚动的影响
            pt[0] += view.getLeft() - view.getScrollX();
            pt[1] += view.getTop() - view.getScrollY();
            viewParent = view.getParent();
        }
        coord[0] = (int) Math.round(pt[0]);
        coord[1] = (int) Math.round(pt[1]);
        return scale;

}

 
其中,descendant 是子View,coord是在descendant中的坐标值。而这个函数是父View的函数。当然,我们可以可以加一个
参数,指定父View。
 
 
 

在Android中将子View的坐标转换为父View的坐标的更多相关文章

  1. View事件传递之父View和子View之间的那点事

    Android事件传递流程在网上可以找到很多资料,FrameWork层输入事件和消费事件,可以参考: Touch事件派发过程详解 这篇blog阐述了底层是如何处理屏幕输,并往上传递的.Touch事件传 ...

  2. Android中将xml布局文件转化为View树的过程分析(下)-- LayoutInflater源码分析

    在Android开发中为了inflate一个布局文件,大体有2种方式,如下所示: // 1. get a instance of LayoutInflater, then do whatever yo ...

  3. Android中将xml布局文件转化为View树的过程分析(上)

    有好几周没写东西了,一方面是因为前几个周末都有些事情,另外也是因为没能找到好的写作方向,或者说有些话题 值得分享.写作,可是自己积累还不够,没办法只好闷头继续研究了.这段时间一边在写代码,一边也在想A ...

  4. Android中将十六进制 颜色代码 转换为int类型数值

    Android中 将 十六进制 颜色代码 转换为  int   类型数值 方法  : Color.parseColor("#00CCFF") 返回 int 数值 来自为知笔记(Wi ...

  5. 【android】模拟点击某个指定坐标作用在View上

    /** * 模拟点击某个指定坐标作用在View上 * @param view * @param x * @param y */ public void clickView(View view,floa ...

  6. 【转】Android绘制View的过程研究——计算View的大小

    Android绘制View的过程研究——计算View的大小 转自:http://liujianqiao398.blog.163.com/blog/static/18182725720121023218 ...

  7. Android事件分发机制二:viewGroup与view对事件的处理

    前言 很高兴遇见你~ 在上一篇文章 Android事件分发机制一:事件是如何到达activity的? 中,我们讨论了触摸信息从屏幕产生到发送给具体 的view处理的整体流程,这里先来简单回顾一下: 触 ...

  8. Android动画总结#补间动画(Tween Animation/View Animation) #帧动画(Frame Animation/Drawable Animation)#属性动画(PropertyAnimation)

    1.共有三种动画,英文名字多种叫法如下 第一种动画:补间动画(Tween Animation/View Animation) 四个:RotateAnimation旋转. AlphaAnimation透 ...

  9. Android自定义组件系列【1】——自定义View及ViewGroup

    View类是ViewGroup的父类,ViewGroup具有View的所有特性,ViewGroup主要用来充当View的容器,将其中的View作为自己孩子,并对其进行管理,当然孩子也可以是ViewGr ...

随机推荐

  1. Android应用目录结构分析

    一.手动创建android项目 手动创建一个Android项目,命名为HelloWorld,命令如下: android create project -n HelloWorld -t 1 -p E:/ ...

  2. 数数字 (Digit Counting,ACM/ICPC Danang 2007,UVa 1225)

    思路: 利用java 特性,将数字从1 一直加到n,全部放到String中,然后依次对strring扫描每一位,使其carr[str.charAt(i)-'0']++; 最后输出carr[i],即可. ...

  3. Clion = C/C++ 和 Python 共享的 IDE

    Clion + Tdmgcc + Winpython(Python)

  4. 锋利的jQuery-7--query ui效果库--拖动排序插件sortable

    一个简单的拖动排序效果,具体请参看jQuery ui官网demo. jquery ui :http://jqueryui.com/ sortable例子:http://jqueryui.com/sor ...

  5. TCP/IP协议栈概述

    TCP/IP协议栈概述 这篇文章虽然只是很粗浅的介绍了ISO/OSI 网络模型,但确实把握住了关键点,某种意义上,简单回顾一下就可以加深对TCP/IP协议栈的理解. 原作者:阮一峰 链接: http: ...

  6. controller传值view

    400错误是请求错误 Model是map格式 @Controller public class HelloController { //view的值传给controller @RequestMappi ...

  7. gnl总结(#,%,$)

    Ognl表达式struts标签“%,#,$” 1.什么是Ognl? OGNL(Object-Graphic Navigation Language),对象图道行语言.是一种可以方便操作对象属性的开源表 ...

  8. javascript工厂模式

    工厂模式 设计工厂模式的目的是为了创建对象.它通常在类或者类的静态方法实现,具有下列目标: 1.在创建相似对象是执行重复操作 2.在编译时不知道具体类型(类)的情况下,为工厂客户提供一种创建对象的接口 ...

  9. 如何在WordPress中使用七牛云存储

    序:七牛云存储可以方便的将网站的图片等数据镜像到七牛云存储的空间,直接从云端将数据返回给用户.这样可以大大节省网站的空间,提升网站的访问速度. 真正显示一键实现WordPress博客静态文件CDN加速 ...

  10. alipay iOS SDK

    我也是醉了,进支付宝主页找都找不到,好不容易找到赶紧记下来:https://b.alipay.com/order/productDetail.htm?productId=201308060460965 ...