【问题标题】:Dispatch touch event to view drawn on canvas调度触摸事件到画布上绘制的视图
【发布时间】:2020-05-11 13:28:06
【问题描述】:

我正在制作一个自定义视图,我可以在其上添加项目(图像、文本等)并拖动它们,以及缩放和旋转。现在我想向该画布添加整个视图。我使用了Viewdraw(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)
    }
}

有什么想法吗?谢谢!

【问题讨论】:

    标签: android kotlin view touch-event


    【解决方案1】:

    您将无法与您在画布上绘制的视图进行交互。您没有将其添加到布局“android 样式”中,而是手动绘制 - 这意味着您需要手动确定用户是否根据点击位置和按钮绘制位置点击绘制的按钮,手动调用选择器(您还需要手动重绘选择器用法)并手动调用相应的方法。这不是在 android 上做这些事情的好方法,因为你会错过几乎所有的 android ui 框架功能,你必须手动实现它们。

    问题是您正在绘制视图的图片,而不是视图本身 - 这就是问题所在。

    【讨论】:

    • 好的。有视图更新怎么样?假设视图包含一个圆形进度条,是否可以在视图重绘时收到通知,以便我可以在画布上绘制它?
    • 真的不知道。我从未尝试过这样的事情,但我可能会认为不会 - 因为进度条只是一个带有动画的图像文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 2022-01-12
    • 2023-03-28
    相关资源
    最近更新 更多