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

May*_*ank 2 android android-layout android-view

我有一个嵌套视图V的自定义布局,如下所示:LinearLayout L1 ---> LinearLayout L2 ---> View V.

我有一个为V注册的OnTouchListener.在触摸事件中,我需要获取相对于视图V边缘的触摸事件的坐标.

event.getX()和event.getY()返回的值相对于?我用google搜索并看到相互矛盾的语句,有人说这些值已经相对于视图V的边缘,但是其他人说我需要从event.getX()和event.getY()中减去视图V的边缘坐标来得到相对坐标.

谢谢你的帮助.

Xav*_*Gil 5

来自Google的文档

getX()方法:

此视图的可视x位置(以像素为单位).这相当于translationX属性加上当前的left属性.

setTranslationX()方法:

设置此视图相对于其左侧位置的水平位置.除了对象的布局放置它之外,这有效地定位了布局后的对象.

getLeft()方法:

此视图相对于其父级的左侧位置.

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

更新:

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

在你的布局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>
Run Code Online (Sandbox Code Playgroud)

在您的活动中:

    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;
        }
    });
Run Code Online (Sandbox Code Playgroud)

如果单击其左边距上的按钮,则会得到接近0.0的值.

  • 实际上,我的问题是event.getX()和event.getY()是相对的,对不起,如果不清楚的话.我编辑了我的问题. (3认同)