我在Android中有以下 struct
- 相对布局1(背景色为黑色)
- 相对布局2(背景色为白色)
- TextView 1(背景色为红色)
- 相对布局2(背景色为白色)
当用户touch 我的文本视图(MotionEvent.ACTION_DOWN)时,我希望获得touch 的x和y坐标.
我可以用下面的代码获得触点坐标:
title_text_view.setOnTouchListener (object : View.OnTouchListener {
override fun onTouch (view: View, event: MotionEvent): Boolean {
if (event.actionMasked == MotionEvent.ACTION_DOWN) {
var x:Float
var y:Float
x = view.x + event.x
y = (view.parent as ViewGroup).y + view.y + event.y
}
// returning false indicates that the listener has not consumed the touch event
// If no other listener consumes the event, the system will handle it according to the default behavior
return false
}
})
如您所见,要计算我的Y坐标,我必须加上(vent.y+view.y+(view.parent as ViewGroup).y)
假设我点击了黑点(在Click Me之间,请看图像),WRT到文本ClickMe,(0,0)将从左上角红色开始,这样我就可以基于它(Event.x&;Event.y)得到x,y,但是为了让它WRT到屏幕的0,0,即左上角黑角,我需要找到父母的View.y(白色部分,即50)和父母的父母的View.y(黑色部分,即900).
然后计算实际的y:107+50+900
但我可以有一个更复杂的层次 struct ,即相对布局内部的相对布局,然后是文本视图.有没有其他方法可以不用计算直接得到x,y坐标?
PS:我知道我可以在最上面的相对布局上设置一个setOnTouchListener,然后得到x,y,我就会得到x,y,但我必须只在我的文本视图上设置事件侦听器.