1

Canvas にシェイプを描画し、ユーザーがその Canvas で実行したクリックに関する情報を取得しようとしています。

Button クラスを拡張するクラスを作成しました。

  class CustomDrawableButton extends Button {
    private final ShapeDrawable mDrawable;
    int x = 50;
    int y = 50;
    int width = 30;
    int height = 30;

    public CustomDrawableButton (Context context) {
       super(context);
       mDrawable = new ShapeDrawable (new OvalShape ());
       mDrawable.getPaint().setColor(Color.GREEN);
       mDrawable.setBounds(x, y, x + width, y + height);
    }

    protected void onDraw(Canvas canvas) {
      mDrawable.draw(canvas);
    }
  }

次に、View も拡張するクラスで、インスタンス化とリスナーを追加しました。

  CustomDrawableButton mCustomDrawableButton = new CustomDrawableButton(getBaseContext());

  layout.addView(mCustomDrawableButton);

  mCustomDrawableButton.draw(canvas);

  mCustomDrawableButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
      System.out.println("Yey clicked");
     Toast.makeText(view.getContext(), "Yey", Toast.LENGTH_LONG).show();
    }});

これを実行すると、画像/ボタンのクリックを検出できません。ShapeDrawable オブジェクトは「クリック可能」にできないことを読みましたが、ボタン (ビューであり、「クリック可能」) を拡張しているので、これが機能することを期待していました。

これは可能ですか?この方法ではない場合、キャンバスまたはビューで押された画面座標に関する情報を取得する方法を教えてもらえますか?

前もって感謝します。

4

1 に答える 1

0

いくつか検索した後、タッチされた画面の位置を取得してそれを行う方法を示すチュートリアルを次に示します。

http://marakana.com/tutorials/android/2d-graphics-example.html

タッチされたイベントをボタンに自動的にバインドする方法はまだわかりません。やり方わかる人いたら教えてください。

ありがとう。

于 2010-08-19T20:56:11.947 に答える