2012-02-03 7 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

アンドロイドの開発では、キャンバスが描画に使用されます。ビューは、ユーザーと対話するために使用されます。キャンバスがユーザー入力を受け取るための直接的なメカニズムはありません。これはビューを通して処理する必要があります。

キャンバスをホストしているビューにonTouchListenerを追加し、そのリスナーを使用してユーザーからの接触に関する状態情報を保存すると便利です。

+0

したがって、ドラッグクリックのためにキャンバス上の場所を取得するためにonTouchListenerを使用するにはどうすればよいですか?私はあるポイントから別のポイントへドラッグ・クリックするためのキャンバス上の座標が必要です。両方の座標を使用して、私はそれが有効な移動かどうかを判断し、それに応じて出力を得ます。 – degant

+2

ゲームのコンテキストをキャンバスの範囲外に保つ必要があります。キャンバスをゲームボードとして考えるのではなく、「キャンバスにゲームボードを描くつもりです。」というキャンバスをゲームのコンテキストの描画とみなしてください。 onTouchListenerは、共有されているゲームボードを参照して、その移動が有効かどうかを判断し、drawメソッドは単にゲームボードを描画する必要があります。タッチ可能なエリアでヒットチェックを行い、何がクリックされたのか把握し、ゲームボードを調べて有効かどうか調べます。 –

関連する問題