私は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;
}
}
したがって、ドラッグクリックのためにキャンバス上の場所を取得するためにonTouchListenerを使用するにはどうすればよいですか?私はあるポイントから別のポイントへドラッグ・クリックするためのキャンバス上の座標が必要です。両方の座標を使用して、私はそれが有効な移動かどうかを判断し、それに応じて出力を得ます。 – degant
ゲームのコンテキストをキャンバスの範囲外に保つ必要があります。キャンバスをゲームボードとして考えるのではなく、「キャンバスにゲームボードを描くつもりです。」というキャンバスをゲームのコンテキストの描画とみなしてください。 onTouchListenerは、共有されているゲームボードを参照して、その移動が有効かどうかを判断し、drawメソッドは単にゲームボードを描画する必要があります。タッチ可能なエリアでヒットチェックを行い、何がクリックされたのか把握し、ゲームボードを調べて有効かどうか調べます。 –