2013-02-27 23 views
0

一旦觸摸事件發生,我一直試圖在TouchView的位置繪製一個在ImageView中的圓。我已經制定了一些例子,包括Android - Canvas drawLine inside ImageView。 我的問題是,該圈出現約。比觸摸點低117px。 我的代碼 -Android界面在圖像視圖中出現比預期的要低

public boolean onTouchEvent(MotionEvent event){ 
     Canvas c; 
     Paint p; 
     ImageView v; 
     Bitmap bm; 

    v = (ImageView)findViewById(R.id.image1); 
    bm = Bitmap.createBitmap(v.getWidth(),v.getHeight(),Config.ARGB_8888); 
    c = new Canvas(bm); 
    p = new Paint();   
    p.setColor(Color.GREEN);   
    float x = event.getX(); float y = event.getY(); 
    c.drawCircle(x, y, 20, p);  

    v.setImageBitmap(bm); 

    return true; 
} 

Here是AVD的屏幕截圖(我在真機測試,它也可以)。我不知道發生了什麼問題或缺少什麼基本事實。 請幫助。

回答

2

它看起來像你重寫了Activity的onTouchEvent?如果是這樣,定位將相對於它的視圖而不是圖像視圖。您必須考慮圖片視圖的位置並進行相應的翻譯。

int relPosX = event.getX() - getLeft(); 
int relPoxY = event.getY() - getTop(); 
+0

是的,我重寫主Activity的onTouchEvent。但我通過傳遞c.drawCircle(0,0,20,p)來檢查。它正確地繪製到左上角。 – Bond 2013-02-27 21:48:47

+0

R.id.image1的頂部/左側是什麼?我的猜測是,頂部是117px。 – 2013-02-27 21:52:43

+0

@Bond - 如果只想在ImageView中單擊時繪製到ImageView,我建議將您的onTouchEvent移動到擴展的ImageView中。否則,您必須將觸摸事件座標轉換爲像Berdon所說的ImageView座標。 – dymmeh 2013-02-27 21:55:07