2

キャンバスに shaperawables を描画し、タッチ イベントでどの図形がタッチされたかを検出したいと考えています。(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;
    }
}
4

1 に答える 1

0

キャンバスが実際に何であるかに基づいて、キャンバスに描かれた形状の位置を本質的に知る方法はないと思います。

形状が描画されている場所を追跡し (残念ながら座標を使用して)、タッチ イベントに対してそれをチェックすることが唯一のオプションである可能性があります。

私はこの分野の専門家ではないので、「かもしれない」と言いますが、過去にキャンバスで多くの作業を行ってきました。

とはいえ、これを簡素化するためのライブラリがあります。私が取り組んだあるマッピング アプリケーションでは、これを使用しました。

https://github.com/onlylemi/MapView

このライブラリには、マップ上の物 (形状) の場所を知るためのサポートが組み込まれています。とは言っても、このライブラリは (MarkLayer.java クラスに見られるように) 座標とタッチ イベントを使用します。

于 2019-02-02T13:01:07.410 に答える