Android 如何在Canvas onDraw方法中创建onClick事件

2023-12-05

我四处搜寻,仍然找不到好的答案。我创建了自己的类来扩展 imageView,并在 onDraw() 方法中使用画布在图像上绘制圆圈。

我现在想做的是在图像的不同位置绘制一个按钮,并为其设置一个 onClick 事件,这样当用户按下该按钮时,它将打开一个新的活动。

这是我到目前为止所拥有的..它将按钮绘制在正确的位置,除了我的 onClick 方法没有触发

@Override
protected void onDraw(Canvas canvas){
    super.onDraw(canvas);

        //1.arrayList Points. 2.arrayLists for points in X, 3.arrayList for points in Y
        for(int i=0; i<arrayListPoints.size(); i++){


             Button b = new Button(mContext);
             LinearLayout ll = new LinearLayout(mContext);
             LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
             layoutParams.setMargins(alPoints_x.get(i), alPoints_y.get(i), 0, 0);

             ll.addView(b, layoutParams);

            //Measure and layout the linear layout before drawing it
             ll.measure(MeasureSpec.getSize(ll.getMeasuredWidth()), MeasureSpec.getSize(ll.getMeasuredHeight()));
             ll.layout(0, 0, MeasureSpec.getSize(b.getMeasuredWidth()), MeasureSpec.getSize(b.getMeasuredHeight()));
             //Finally draw the linear layout on the canvas
             ll.draw(canvas);


            //create an onClick event for the button
            b.setOnClickListener(new OnClickListener() {
                 @Override
                 public void onClick(View v) {

                     Toast msg = Toast.makeText(mContext, "button clicked \n", Toast.LENGTH_LONG);
                     msg.show(); 

                 } //end of public void

            });

        }


    invalidate();   

}   //end of onDraw()

我不得不说这种做法可能是有目的的,但我不认为有目的。为什么每次重绘图像视图时都要重新创建并绘制布局?

onClick 侦听器不起作用的原因是因为您的布局从未注入到活动内容中,您只是在绘制它(我认为这甚至不会发挥创造力)此外,由于布局和按钮未附加对于任何我很确定它们都会被垃圾收集的东西,这当然与这里无关,只是说一下。

而且每次绘制画布时都会发生这种情况,这对性能或记忆都不利。

是否有某种原因您不只是使用图像视图和按钮创建布局,然后在需要时移动按钮。

如果您坚持这种方法,我能想到的唯一“解决方案”是跟踪图像视图中按钮的矩形,然后检查在绘制按钮的区域内是否“单击”了运动事件。

如果您告诉我们为什么要尝试这样做,我们可能可以提供比此实现更好的解决方案,这似乎确实没有必要或正确,但您可能有一个我想不出的有效理由。

Update

所以我认为根据你的评论你想做的是

将 AbsoluteLayout 容器放在地图上(填充父级),或者将地图放置在这样的容器中,无论哪种方式。

然后将按钮放入该布局容器中(通过 xml 或以编程方式,并不重要)

然后设置这些按钮的布局 x/y/可见性

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 如何在Canvas onDraw方法中创建onClick事件 的相关文章

随机推荐