[英]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.