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。
     
     
     





  • 相关阅读:
    Shiro 学习笔记(Realm)
    Shiro 学习笔记(Authentication)
    Shiro 学习笔记(基本结构)
    POI 示例(导入,导出)
    SpringBoot 整合POI
    解决使用drf-haystack报错ImportError: cannot import name get_count
    python实现冒泡排序和插入排序
    九大排序算法总结(转)
    Djaong 数据库查询
    django session 和cookie的设置,获取和删除
  • 原文地址:https://www.cnblogs.com/platte/p/3534279.html
Copyright © 2011-2022 走看看