Android 在画布图形上设置触摸侦听器

Android 在画布图形上设置触摸侦听器,android,canvas,drawing,ontouchlistener,Android,Canvas,Drawing,Ontouchlistener,假设我在画布上画了一个位图图像或简单的圆圈。如何设置OnTouchListener以检查我的图形是否已被触摸?因为我将在画布上绘制多个圆,所以我希望每个圆都有一些唯一的id,以便我可以相应地工作。使用画布很难做到这一点。您应该自己处理触摸事件,并根据坐标/大小/z索引检查您触摸的圆圈 但是,如果每个圆都是一个视图,那么事情就会变得更容易。在这种情况下,您将能够使用standart android touch事件监听器。对于圆,你应该创建自定义视图类,在处理触摸时会考虑圆圈形状。 当你在屏幕上触摸

假设我在画布上画了一个位图图像或简单的圆圈。如何设置OnTouchListener以检查我的图形是否已被触摸?因为我将在画布上绘制多个圆,所以我希望每个圆都有一些唯一的id,以便我可以相应地工作。

使用画布很难做到这一点。您应该自己处理触摸事件,并根据坐标/大小/z索引检查您触摸的圆圈


但是,如果每个圆都是一个视图,那么事情就会变得更容易。在这种情况下,您将能够使用standart android touch事件监听器。对于圆,你应该创建自定义视图类,在处理触摸时会考虑圆圈形状。

当你在屏幕上触摸时,得到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;
 }
 }

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

如何捕捉用户图形坐标:

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

您的视图有一个onTouch(..),可用于屏幕上的触摸事件,但我如何具体知道画布上的哪个圆被触摸?计算圆中心和屏幕上触摸点之间的距离。如果距离在圆的半径内,则触摸在绘制的圆内。我假设每个圆都有不同的半径。每个圆都是动态的和移动的,而且每个圆都有相同的半径使用不同的视图来绘制圆,您可以使用视图。我不知道这将如何影响性能。对于每个圆绘制,使用不同的视图。不,但我的圆是动态的,因此每次绘制圆时都要检查它们的位置,这将非常可怕。您可以将圆心和半径存储在某个位置,并使用上面的值计算距离。没有半径就不能画圆。动态绘制时,存储值并在上面的代码中使用。如何在画布上绘制自定义视图?您不应该自己绘制它们。使用Framelayout并在其中放置带有圆圈的视图。