2012-02-03 79 views
0

我剛開始使用Android,我想知道如何在畫布中使用監​​聽器。特別是作爲我的項目的一部分,我們的目標是在將點擊從一個點拖到另一個點時發生事件。這個概念來自一個叫做brainvita的遊戲。無需理解遊戲來回答我的問題。我想知道的僅僅是使畫布上的拖動點擊從一個點到另一個點的監聽器的最簡單方法?在畫布上的Android偵聽器?

我是否需要將畫布映射到網格並擁有多個偵聽器?最簡單的方法是什麼?

此外,我附上了迄今爲止開發的遊戲的代碼,只是幫助顯示網格的基礎知識!

package com.project.android.brainvita; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.view.View; 

public class GameView extends View { 

Paint paint = new Paint(); 
Paint paintF = new Paint(); 
Paint paintG = new Paint(); 
int width, height; 
int MARGIN = 4; 
int MARGIN_BIG = 10; 
int sx = 2; 

public GameView(Context context) { 
    super(context); 
    paint.setColor(Color.WHITE); 
    paintF.setColor(Color.rgb(40, 60, 204)); 
    paintG.setColor(Color.rgb(240, 30, 20)); 
} 

public void onDraw(Canvas canvas) { 
    // Draw external circle 
    canvas.drawCircle(width/2, height/2, (width - MARGIN)/2, paintF); 

    // Calculate radius of small circles 
    int radius = (width - MARGIN_BIG*2)/14; 

    // Draw grid 
    for (int j = -3; j <= 3; j++) { 
     if (j >= -1 && j <= 1) 
      for (int i = -3; i <= 3; i++) { 
       canvas.drawCircle(width/2 + (2 * radius * i), height/2 
         + (2 * radius * j), radius - sx, paint); 
      } 
     else 
      for (int i = -1; i <= 1; i++) { 
       canvas.drawCircle(width/2 + (2 * radius * i), height/2 
         + (2 * radius * j), radius - sx, paint); 
      } 
    } 
} 

protected void onSizeChanged(int w, int h, int ow, int oh) { 
    width = w; 
    height = h; 
} 

} 

回答

1

在android開發中,畫布用於繪圖。視圖用於與用戶進行交互。畫布沒有直接接收用戶輸入的機制。這必須通過視圖來處理。

您需要將onTouchListener添加到託管畫布的View中,並使用該偵聽器來存儲有關用戶觸摸的狀態信息。

+0

那麼,如何使用onTouchListener獲取畫布上的拖動點擊位置?我需要畫布上的座標以從一點拖動到另一點。使用這兩個座標我將確定它是否是有效的移動或相應的輸出。 – degant 2012-02-03 08:17:20

+2

您需要將遊戲的上下文保持在畫布範圍之外。將您的畫布視爲遊戲背景的圖畫,即「我要將遊戲板繪製到畫布上」,而不是將您的畫布視爲遊戲板。 onTouchListener應該諮詢共享的遊戲板以確定該移動是否有效,並且繪製方法應該繪製遊戲板。你可以通過觸摸區域來檢查點擊的內容,然後查閱遊戲板以確定它是否有效。 – 2012-02-03 15:54:43