Android:对于嵌套视图,getX()和getY()相对于什么?

3
我有一个自定义布局,其中包含一个嵌套的视图V,布局结构如下: LinearLayout L1 ---> LinearLayout L2 ---> View V。
我已经为V注册了OnTouchListener。在触摸事件上,我需要获取相对于视图V边缘的触摸事件坐标。
event.getX()和event.getY()返回的值是相对于什么的?我已经在谷歌上搜索了一些资料,但得到的说法不一,有人说这些值已经相对于视图V的边缘,而另一些人则说我需要从event.getX()和event.getY()中减去视图V的边缘坐标才能获取相对坐标。
感谢您的帮助。
1个回答

5

来自谷歌文档:

getX() 方法:

视图在像素中的水平位置。这相当于translationX属性加上当前left属性。

setTranslationX() 方法:

设置视图相对于其左侧位置的水平位置。这将有效地在对象的布局放置它的任何地方之外,定位对象的后处理布局。

getLeft() 方法:

此视图相对于其父项的左侧位置。

因此,getX() 返回视图相对于其父项的水平位置。

更新:

对于 event.getX(),你获得的结果也是相对于父项的。您可以通过将一个按钮放置在水平居中的RelativeLayout中并在单击该按钮时检查值来进行简单测试。

在您的layout xml中:

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:layout_centerHorizontal="true">

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</RelativeLayout>

在您的活动中:
    mBtn = ((Button) findViewById( R.id.button1 ));
    mBtn.setOnTouchListener( new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            Log.d("", "getX = " + event.getX());
            return false;
        }
    });

如果您点击左边距上的按钮,您将得到接近0.0的值。


3
实际上,我的问题是event.getX()和event.getY()相对于什么而言的,如果这不清楚的话抱歉。我已经编辑了我的问题。 - Mayank

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接