调度触摸事件以在 canvas 上绘制视图
Dispatch touch event to view drawn on canvas
我正在创建一个自定义视图,我可以在其中添加项目(图像、文本等)并四处拖动它们,还可以进行缩放和旋转。现在我想向 canvas 添加一个完整的视图。我使用了 View
的 draw(canvas)
方法并且有效。但是,我无法与该视图进行交互,例如例如,如果它有一个按钮,即使我将触摸事件传递给该视图,我也无法单击它。我正在这样做:
val mySubView = LayoutInflater.from(context).inflate(R.layout.item, null)
// mySubView is passed to CustomView at some point
class CustomView(context: Context, attrs: AttributeSet?) : View(context, attrs) {
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
mySubView.draw(canvas)
}
override fun onTouchEvent(event: MotionEvent): Boolean {
val handled = mySubView.onTouchEvent(event)
return handled || super.onTouchEvent(event)
}
}
有什么想法吗?谢谢!
您将无法与您在 canvas 上绘制的视图进行交互。您不将其添加到布局 'android style' 中,您手动绘制它 - 这意味着您需要根据点击位置和按钮绘制位置手动确定用户是否点击绘制的按钮,手动调用选择器(您还需要手动重绘选择器用法)并手动调用相应的方法。在 android 上做这些事情不是很好的方法,因为你会错过几乎所有 android ui 框架功能,你将不得不手动实现它们。
问题是您正在绘制视图的图片而不是视图本身 - 这就是问题所在。
我正在创建一个自定义视图,我可以在其中添加项目(图像、文本等)并四处拖动它们,还可以进行缩放和旋转。现在我想向 canvas 添加一个完整的视图。我使用了 View
的 draw(canvas)
方法并且有效。但是,我无法与该视图进行交互,例如例如,如果它有一个按钮,即使我将触摸事件传递给该视图,我也无法单击它。我正在这样做:
val mySubView = LayoutInflater.from(context).inflate(R.layout.item, null)
// mySubView is passed to CustomView at some point
class CustomView(context: Context, attrs: AttributeSet?) : View(context, attrs) {
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
mySubView.draw(canvas)
}
override fun onTouchEvent(event: MotionEvent): Boolean {
val handled = mySubView.onTouchEvent(event)
return handled || super.onTouchEvent(event)
}
}
有什么想法吗?谢谢!
您将无法与您在 canvas 上绘制的视图进行交互。您不将其添加到布局 'android style' 中,您手动绘制它 - 这意味着您需要根据点击位置和按钮绘制位置手动确定用户是否点击绘制的按钮,手动调用选择器(您还需要手动重绘选择器用法)并手动调用相应的方法。在 android 上做这些事情不是很好的方法,因为你会错过几乎所有 android ui 框架功能,你将不得不手动实现它们。
问题是您正在绘制视图的图片而不是视图本身 - 这就是问题所在。