我在画布上绘制了一个形状可绘制对象,我想在触摸事件中检测触摸了哪些形状。无需按 (x,y) 计算,只需自动执行 HTML 中存在的内容。谢谢!:)
我成功地绘制了形状,并阅读了很多关于如何通过使用 (x,y) 计算来检测触摸的信息,但是如果我有可能自动检测触摸的形状,这样做并不聪明。如果我不能用画布做到这一点,我会很高兴听到如何使用 android 中的另一个小部件绘制形状和检测触摸的形状。
public class CanvasView extends View implements View.OnTouchListener
{
private List<ShapeDrawable> shapes;
private ShapeDrawable currentCircle;
public CanvasViewenter code here(Context context, @Nullable AttributeSet attrs)
{
super(context, attrs);
setFocusable(true);
setFocusableInTouchMode(true);
this.setOnTouchListener(this);
this.shapes = new ArrayList<>();
}
@Override
protected void onDraw(final Canvas canvas)
{
super.onDraw(canvas);
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent)
{
//here I want to get all the shapes that have been touched
List<ShapeDrawable> touchedShapes = null;
return true;
}
}
基于画布的实际含义,我不相信它有任何方法可以本质上知道绘制在其上的形状的位置。
跟踪形状的绘制位置(不幸的是,使用坐标),并根据触摸事件进行检查可能是唯一的选择。
我说"可能",因为我不是这方面的专家,但我过去经常使用画布。
也就是说,有一些库可以简化这一点。在我开发的一个地图应用程序中,我使用了这个:
https://github.com/onlylemi/MapView
这个库内置了对了解事物(形状)在地图上的位置的支持。也就是说,这个库在下面使用坐标和触摸事件(如他们的 MarkLayer.java 类所示),你会发现大多数也是如此。