我有一个嵌套视图V的自定义布局,如下所示: LinearLayout L1 ---> LinearLayout L2 --->查看V。
我有一个为V注册的OnTouchListener。在触摸事件中,我需要获取相对于视图V边缘的触摸事件的坐标。
event.getX()和event.getY()相对于?返回的值是多少?我用google搜索并看到相互矛盾的语句,有人说这些值已经相对于视图V的边缘,但是其他人说我需要从event.getX()和event.getY()中减去视图V的边缘坐标来得到相对坐标。
感谢您的帮助。
答案 0 :(得分:5)
来自Google的文档
getX()方法:
此视图的可视x位置(以像素为单位)。这相当于 translationX属性加上当前左侧属性。
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的值。