如何检测在画布上绘制的shapedrawable?

时间:2019-02-02 12:24:43

标签: android android-canvas shapes ontouch shapedrawable

我在画布上绘制了shapedrawables,我想在触摸事件中检测触摸了哪些形状。 无需通过(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;
    }
}

1 个答案:

答案 0 :(得分:0)

基于画布的实际用途,我认为它无法通过任何方式本质上了解绘制在画布上的形状的位置。

跟踪绘制形状的位置(不幸的是使用坐标),并检查是否发生了触摸事件,这是唯一的选择。

我说“威力”,因为我不是这方面的专家,但我已经与画布在过去的工作有很多。

这就是说,有库那里来简化此。在我开发的一个地图绘制应用程序中,我使用了以下代码:

https://github.com/onlylemi/MapView

此库内置了对知道事物(形状)在地图上的位置的支持。这就是说,这个LIB用途COORDS和触摸事件的下方(如图他们MarkLayer.java类),因为这样做最,你会发现。