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





转载于:https://www.cnblogs.com/platte/p/3534279.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是创建 Android 项目并实现自定义 View 组件跟随手指的小兔的步骤: 1. 在 Eclipse 中创建一个新的 Android 项目。 2. 在项目的 `res/layout` 目录下创建一个新的布局文件,例如 `rabbit.xml`。在该布局文件中添加一个 `RelativeLayout` 布局,并在其中添加一个自定义 View 组件,例如 `RabbitView`。 3. 在项目的 `src` 目录下创建一个新的 Java 类,例如 `RabbitView.java`,并使其继承自 `View` 类。 4. 在 `RabbitView` 类中添加一个成员变量 `rabbitBitmap`,用于存储小兔的位图资源。 5. 在 `RabbitView` 类中重写 `onDraw` 方法,并在其中使用 `Canvas` 绘制小兔位图。 6. 在 `RabbitView` 类中重写 `onTouchEvent` 方法,并在其中获取手指触摸坐标,并将小兔的位置设置为该坐标。 7. 在 `rabbit.xml` 布局文件中将 `RabbitView` 组件的 `layout_width` 和 `layout_height` 属性设置为 `match_parent`,以使其占据整个屏幕。 8. 在 `rabbit.xml` 布局文件中添加一个 `ImageView` 组件,并将其 `src` 属性设置为小兔的位图资源。将该组件的 `layout_width` 和 `layout_height` 属性设置为小兔位图的宽度和高度。 9. 在 `rabbit.xml` 布局文件中将 `RabbitView` 组件放置在 `ImageView` 组件上方,并设置其 `layout_width` 和 `layout_height` 属性与 `ImageView` 组件相同。 10. 运行应用程序并触摸屏幕,您将看到小兔跟随手指移动的效果。 希望这些步骤能帮助您实现自定义 View 组件跟随手指的小兔
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值