質問

ImageViewに画像があります。画像に触れるときに、画像の正確な(x、y)座標を知る必要があります。また、タッチプレイスに円を描きたいです。

以下に、私が使用するコードです。 ImageViewがあり、OntouchListenerを添付します。

問題はこれです:

  1. 奇妙な(x、y)値が得られます
  2. 新しいサークルは3回だけ描かれています。その後、新しいサークルは描かれていません!

    ImageView touch=(ImageView) findViewById(R.id.image);
    touch.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN){
    
               //Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
               //Canvas can=new Canvas(bm);
               p.setColor(Color.RED);
               float fx=event.getX();
               float fy=event.getY();
               can.drawCircle(fx, fy, 20, p);                   
            }
            return true;
        }
    });
    
役に立ちましたか?

解決

問題は、あなたがの位置を考慮していない可能性が最も高いことです MotionEvent コンテンディングビューに関連するように調整されています( ImageView この場合)そしてそれはあなたがそれらを別のものに描画しようとしているように見えます Canvas 異なる座標空間があります。このように2つを分離する必要がある場合は、使用することをお勧めします MotionEvent.getRawX()MotionEvent.getRawY() タッチ値が画面全体の座標にあるように。

ただし、画像の上に円を描きたい場合は、より良い解決策はサブクラスになることです ImageView そのため、タッチを検出できます onTouchEvent() メソッド(リスナーの代わりに)を直接 onDraw() 方法、すべてが同じ調整された座標平面にあることを保証します。

この操作が3回しか正しく機能しないのかは、コードから明らかではありません。おそらく戻ってみるだけです true 興味のあるダウンインスタンスのタッチ検出方法から。現在の実装でタッチイベントを不必要に盗んでいる可能性があります。

Hth

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top