2011-04-05 63 views
1

有沒有辦法獲取可滾動地圖上觸摸事件的座標?獲取觸摸事件相對於可滾動地圖的座標

含義當我觸摸屏幕上的一個點時,getX()getY()返回相應的值,然後當我滾動地圖時,返回的座標應該是相對於地圖而不是屏幕。
例如。我有一個750x750的背景地圖,我的設備屏幕尺寸是480x800。
當我第一次觸摸,說回來的座標是(100,200)。現在當我滾動地圖並觸摸其他地方時,我得到的座標爲200,200.
我想獲取關於地圖而不是屏幕的座標。

我一直在試圖弄清楚這個很長一段時間,並已經徒勞地搜尋網絡和其他網站。

請大家幫忙。
由於事先
\ M/

我需要的座標,怎麼我正在開發一個遊戲,我有一個大的地圖和對象置於其上。當我滾動地圖時,我需要物體在同一位置移動。 這裏是我的代碼:

@Override 
public boolean onTouchEvent(MotionEvent ev) { 

    switch (ev.getAction()) { 

    case MotionEvent.ACTION_DOWN: 
     touchStart.set(ev.getX(), ev.getY()); 
    x = ev.getX(); 
    y = ev.getY(); 
     break; 
    case MotionEvent.ACTION_MOVE: 
     newX = ev.getX() - touchStart.x + prevPicStart.x; 
     newY = ev.getY() - touchStart.y + prevPicStart.y; 
     if ((newX <= 0 && newX > 0 - mBG.getWidth() + Craz.DISP_WIDTH)) { 
      picStart.x = newX; 
      } 
     if ((newY <= 0 && newY > 0 - mBG.getHeight() + Craz.DISP_HEIGHT)) { 
      picStart.y = newY; 

     } 
     invalidate(); 
     break; 

    case MotionEvent.ACTION_UP: 

     prevPicStart.x = picStart.x; 
     prevPicStart.y = picStart.y; 

     break; 
    } 
    return true; 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    Paint paint = new Paint(); 
    canvas.drawBitmap(mBG, picStart.x, picStart.y, paint); 

    canvas.translate(picStart.x, picStart.y); 

    mBDoor.draw(canvas); 
} 
+0

它是一個自定義視圖嗎?你是否用'scrollTo()'/'scrollBy()'實現了滾動?您可以將'getScroll *()'值添加到屏幕相對座標。 – bigstones 2011-04-05 12:37:39

回答

2

它很容易。當你滾動你的地圖時,你有一個偏移量。如果您向右滾動(背景將向左移動),您的偏移量將爲負值。比方說,你有-50 x上的偏移,並單擊屏幕座標100,你只需做數學題:

mapCoordX = screenX - offsetX; // makes: 100 - (-50) = 150 

只是看X座標,Y的應該是相同的。

我寫了一個tutorial about a map of tiles and scrolling over it。也許你也看看它。

Pseudocode!

for (int id = 0; id < mapSize; id++) { 
    Tile tile = new Tile(id); 
    startX = id * tileWidth; 
    startY = id % rowLenght + id/rowLenght; 
    tile.setBackground(createCroppedBitmap(background, startX, startY)); 
} 
+0

@WarrenFaith你能告訴我如何平鋪大圖嗎?我的背景地圖是750x700 – Blacklight119 2011-04-06 06:13:58

+0

我需要的座標因爲我正在開發一個遊戲,其中我有一個大地圖和對象放在它上面。當我滾動地圖時,我需要物體在同一位置移動。我已經發布了我的代碼。 – Blacklight119 2011-04-06 06:31:47

+0

@Blacklight當你按照發布的教程,你應該能夠創建一個平鋪的地圖。您可以使用圖塊對象的創建來裁剪背景區域。我編輯了我的答案進行了最小限度的介紹 – WarrenFaith 2011-04-06 09:38:22

相關問題