繁体   English   中英

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

[英]Android: For a nested view, what are getX() and gety() relative to?

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

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

与event.getX()和event.getY()相关的返回值是什么? 我四处搜寻,发现有冲突的陈述,有人说这些值已经相对于视图V的边缘,而另一些人说我需要从event.getX()和event.getY()中减去视图V的边缘坐标才能得到相对值坐标。

谢谢你的帮助。

摘自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>

在您的活动中:

    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的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM