画布上的Android Listener?

时间:2012-02-03 07:17:10

标签: android listener android-canvas

我刚刚开始使用Android,我想知道如何在画布中使用侦听器。特别是作为我的项目的一部分,目标是当我们将点击从一个点拖动到另一个点时发生事件。这个概念来自一个名为brainvita的游戏。不需要理解游戏来回答我的问题。我想知道的是在画布上从一个点到另一个点进行拖动点击的最简单方法吗?

我是否需要将画布映射到网格并拥有多个侦听器?什么是最简单的方法?

此外,我附上了迄今为止开发的游戏代码,只是帮助显示网格的基础知识!

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 个答案:

答案 0 :(得分:1)

在android开发中,画布用于绘图。视图用于与用户交互。画布没有直接机制来接收用户输入。这必须通过视图处理。

您需要将onTouchListener添加到托管画布的View中,并使用该侦听器存储有关用户触摸的状态信息。