android画布中的图形没有按预期显示

时间:2014-12-15 04:20:13

标签: java android android-canvas

我是Android编程新手。我试图创建一个简单的x和零游戏。作为第一步,我将屏幕划分为九个块。但是,为了将符号添加到单元格中,对象仅出现在第一个单元格中。我正在添加代码以获取更多详细信息

Game.java

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
/**
 * Created by b on 11/27/2014.
 */
public class Game extends View {
    private Cell[][] board = null;
    int x=3;
    int y=3;
    int l;
    int w;
    boolean whatdrawn;
    Paint gallery;
    Canvas canvas;
    Handler handler = new Handler() {
        // @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 0:
                    Toast.makeText(getContext(), "You Win!",
                            Toast.LENGTH_SHORT).show();
                case 1:
                    Toast.makeText(getContext(), "You Win!",
                            Toast.LENGTH_SHORT).show();
                    break;
                case 2:
                    Toast.makeText(getContext(), "Computer Win!",
                            Toast.LENGTH_SHORT).show();
                    break;
                case 3:
                    Toast.makeText(getContext(), "Loose!",
                            Toast.LENGTH_SHORT).show();
                    break;
                default:
                    break;
            }
            super.handleMessage(msg);
        }
    };

    public Game(Context context) {
       super(context);
        gallery = new Paint();
        this.gallery.clearShadowLayer();
        this.gallery.setStrokeWidth(3);
        l = this.getWidth();
        w = this.getHeight();
        board = new Cell[x][y];
        int xshort = l / x;
        int yshort = w / y;
        for (int a = 0; a < x; a++) {
            for (int b = 0; b < y; b++) {
                board[a][b] = new Empty(a * xshort,b * yshort);
            }
        }
    }

    protected  void onDraw(Canvas canvas) {
        for (int i = 0; i <x; i++) { //(int i = 0; i < board.length; i++)
           for (int j = 0; j < y; j++) {//for (int j = 0; j < board[0].length; j++)
               board[i][j].draw(canvas, (this
                        .getWidth() + 3)
                        / board.length, this.getHeight()
                        / board[0].length);


               String st="We reached board events";
               System.out.println(st+i+j);

           }
        }
        int xs = this.getWidth() / x;
        int ys = this.getHeight() / y;
        for (int i = 0; i <= x; i++) {
            canvas.drawLine(xs * i, 0, xs * i, this.getHeight(), gallery);
        }
        for (int i = 0; i <= y; i++) {
            canvas.drawLine(0, ys * i, this.getWidth(), ys * i, gallery);
        }
       super.onDraw(canvas);
 }

    public boolean onTouchEvent(MotionEvent event) {
        int x_aux = (int) (event.getX()) / (this.getWidth() / x);
        int y_aux = (int) (event.getY()) / (this.getHeight() / y);
        String st="We reached touch events";
        System.out.println(st);
      //  drawimage(x_aux, y_aux);
        return super.onTouchEvent(event);
    }

    public String getPiece(int player) {
        switch (player) {
            case 1:
                return "x";
            case -1:
                return "o";
        }
        return null;
    }
    public void drawimage(int x_aux, int y_aux) {
      Cell cel = null;
      cel = new Cross(x,y);
/*        if (whatdrawn) {
            cel = new
                    Cross(board[x_aux][y_aux].x, board[x_aux][y_aux].y);
            whatdrawn = false;
        } else {
            cel = new Circle(board[x_aux][y_aux].x,board[x_aux][y_aux].y);
            whatdrawn = true;
        }*/
       // board[y_aux][x_aux] = cel;
       // handler.sendMessage(Message.obtain(handler, 0));
    }
    }

Empty.java

package com.labs.xandzero;

/**
 * Created by b on 11/26/2014.
 */
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;


public class Empty extends Cell {
    public Empty(int x,int y)

    {
        super(x,y);
    }
    public void draw(Canvas c,int x,int y)
    {
        Paint paint=new Paint();
        paint.setColor(Color.BLUE);
        c.drawLine(x/3,y/3,2*x/3,2*y/3,paint);
        c.drawCircle(x/2,y/2,10,paint);
    }
}

Cell.java

package com.labs.xandzero;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Point;
import android.view.View;
import android.content.Context;

public abstract class Cell extends Point{


    public Cell(int x,int y)

    {
        super(x,y);
    }
abstract public void draw(Canvas c,int x,int y);
}

作为新手,我无法在此处添加图片

我只在一个单元格中绘图。但我需要在所有单元格中绘制图纸。请帮帮我

http://i.stack.imgur.com/ceN76.jpg

1 个答案:

答案 0 :(得分:0)

I got that the error is occured during the array initialization.

for (int a = 0; a < 3; a++) {
            for (int b = 0; b < 3; b++) {
                board[a][b] = new Empty(a * xshort,b * yshort);
            }
The code works and first cell is accessed.

But If you start with one of the other cell the code if failing and the emulator is not `enter code here`responding.
Eg: 
for (int a = 1; a < 3; a++) {
            for (int b = 1; b < 3; b++) {
                board[a][b] = new Empty(a * xshort,b * yshort);
            }
This is not working !!!