2011-11-28 59 views
1

我在ImageView中有一個圖像。當我觸摸圖像時,我需要知道圖像的確切(x,y)座標。我也想在觸摸的地方畫一個圓圈。有關Android中的ImageView上的觸摸座標的查詢

下面給出的是我使用的代碼。我有一個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; 
        } 
    }); 
    

回答

3

的問題是最有可能的,你是不是考慮到一個事實,即MotionEvent的位置被調整爲相對於包含視圖(ImageView在這種情況下),它看起來就像你試圖在另一個Canvas上繪製它們那樣會有不同的座標空間。如果您需要將這兩者分開,我建議您使用MotionEvent.getRawX()MotionEvent.getRawY(),以便觸摸值作爲整體顯示在屏幕的座標中。

但是,如果你只是想畫在圖像上的圓圈,一個更好的解決辦法是繼承ImageView這樣你就可以在其onTouchEvent()方法直接(而不是聽衆)檢測觸摸,並進行自定義在其onDraw()方法繪製,保證一切都在同一個調整後的座標平面上。

從代碼中看不出來,爲什麼這個操作只能正常工作三次。也許您只需在您感興趣的DOWN實例中嘗試從觸摸檢測方法返回true。您可能不必要地竊取了當前實現的觸摸事件。

HTH

+0

謝謝,工作很好。我不知道爲什麼它只有3次! – Ahsan

+0

但是,如果我放大圖像,繪製的圓圈會移開...座標改變...無論如何要使圓圈繪製永久性的? – Ahsan