在画布绘制上设置触摸监听器

3

假设我已经在画布上绘制了一张位图或简单的圆形。我该如何设置OnTouchListener来检查我的绘制是否被触摸?由于我将在画布上绘制多个圆圈,我希望每一个都有一些独特的id,这样我就可以相应地进行操作。


你的视图有一个onTouch(..)方法,可以用于屏幕上的触摸事件。 - Raghunandan
但是我怎么才能知道画布上哪一个圆被触摸了呢? - Mach Mitch
计算圆心与屏幕触摸点之间的距离。如果距离在圆的半径范围内,则触摸点位于绘制的圆内。我假设每个圆都有不同的半径。 - Raghunandan
每个圆都是动态的并且移动,此外每个圆的半径相同。 - Mach Mitch
使用不同的视图来绘制圆形,并可以使用视图触摸监听器。我不知道它会如何影响性能。对于每个圆形绘制,请使用不同的视图。 - Raghunandan
@MachMitch,你解决了这个问题吗? - ik024
3个回答

1
当您触摸屏幕时,获取x和y坐标。您已经知道圆的中心点。
 //x and y are co-ordiantes when touched.
 //center_x and center_y are co-ordinates of the center of the circle.
 //R is the radius of the cirlcr      

 float dx = Math.abs(x-center_x);
 float dy = Math.abs(y-center_y);
 float R = radius ;//radius of circle.

 boolean checkDistance(float dx,float dy,float R)
 {
 if(dx>R)
 {
  return false;//outside
 }
 else if(dy>R)
 {
 return false;//
 }
 else
 {
 return true;
 }
 }

不过我的圆是动态的,每次检查它们的位置都会非常困难。 - Mach Mitch
当你画圆时,可以将圆心和半径存储在某个地方,并使用上述方法计算距离。如果没有半径,就无法画圆。当您动态绘制时,请存储值并在上述代码中使用它。 - Raghunandan

0

为什么你不获取用户绘图坐标并将其与你的圆形坐标匹配?

如何捕获用户绘图坐标:

int x = (int) event.getX();
int y = (int) event.getY();

0

使用canvas不能轻松地完成这个任务。您应该自己处理触摸事件,并根据它们的坐标/大小/z-index检查您触摸的是哪个圆。

但是,如果每个圆都是单独的视图,则可以使事情变得更容易。在这种情况下,您将能够使用标准的Android触摸事件监听器。对于圆形,您应该创建自定义视图类,该类将在处理触摸时考虑圆形形状。


如何在画布上绘制自定义视图? - Mach Mitch
你不应该自己绘制它们。使用Framelayout,并将你的视图放在其中的圆形中。 - Leonidos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接