zoukankan      html  css  js  c++  java
  • 在Android中将子View的坐标转换为父View的坐标

    在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。
     
     
     





  • 相关阅读:
    python 发邮件乱码
    膳魔师杯使用注意事项
    了解指针,分分钟的事情 C++筆記--指針
    海淘攻略
    【转】Cocos2dx.3x入门三部曲
    在Windows7上搭建Cocos2d-x 3.2alpha0开发环境
    黑苹果 MAC OS X 10.10.2 安装流程
    Linux 下如何查找木马并处理
    js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
    泰*网 Centos 一些命令
  • 原文地址:https://www.cnblogs.com/platte/p/3534279.html
Copyright © 2011-2022 走看看