使用循环绘制多个形状 - Android Canvas

时间:2010-08-07 14:45:01

标签: java android graphics

我对Android开发很新,并且一直试图绘制一个由多个不同颜色的小矩形组成的正方形......就像一个马赛克本质上。

基本上我正在读取文件中的值,该文件将颜色分配给较小的Rects。我正在使用一对嵌套的for循环来尝试逐行顺序绘制小Rects。但是当程序完成时,只绘制了一个小的Rect,它是最后一个要绘制的,其颜色对应于从文件中读取的第一个值。

以下是我的一些代码,向您展示我的意思:

public SnapshotDraw(Context context) {
    super(context);

    for(int a = 0; a < 63; a++){
        for(int b = 0; b < 63; b++){
            fileName = PREFIX + "2" + EXTENSION;

            try {
                bf = new BufferedReader(new FileReader(fileName));
                tokens = new StringTokenizer(bf.readLine(), " \n");
                weight = Byte.parseByte(tokens.nextToken());

                x_scalar = b*MAG;
                y_scalar = a*MAG;   

                mDrawable = new ShapeDrawable(new RectShape());
                mDrawable.getPaint().setColor(colour.getColour(weight));
                mDrawable.setBounds((X_OFFSET + x_scalar), (Y_OFFSET + y_scalar), ((MAG + X_OFFSET) + x_scalar), ((MAG + Y_OFFSET) + y_scalar));

            } catch (FileNotFoundException ex) {
                Logger.getLogger(NetworkUtilities.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(NetworkUtilities.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

protected void onDraw(Canvas canvas) {
    mDrawable.draw(canvas);
}

除了来自扩展View的类,并在Activity中的onCreate()方法内调用。

我很感激任何指导,并提前感谢!!

干杯。

2 个答案:

答案 0 :(得分:3)

您正在循环中构建BufferedReader,因此bf.readLine()将始终返回相同的行。尝试移动bftokens(请注意不要使用StringTokenizer)。

答案 1 :(得分:0)

好的,我把它整理好了!以下是我为解决这个问题所做的工作:

public SnapshotDraw(Context context) {
    super(context);
    setFocusable(true);

    mBitmap = Bitmap.createBitmap(475, 720, Bitmap.Config.ALPHA_8);
}

@Override 
protected void onDraw(Canvas canvas) {
    canvas.drawColor(Color.BLACK);

    Paint p = new Paint();
    float y = 10;

    try {
        fileName = PREFIX + "2" + EXTENSION;
        bf = new BufferedReader(new FileReader(fileName));

        for(int a = 0; a < 63; a++){
            tokens = bf.readLine().split(" \n");
            for(int b = 0; b < 63; b++){

                weight = Byte.parseByte(tokens[b]);

                x_scalar = b*MAG;
                y_scalar = a*MAG;   

                p.setColor(new Colour().getColour(weight));
                canvas.drawRect((X_OFFSET + x_scalar), (Y_OFFSET + y_scalar), ((MAG + X_OFFSET) + x_scalar), ((MAG + Y_OFFSET) + y_scalar), p);
            }
        } 
    } catch (FileNotFoundException ex) {
        Logger.getLogger(NetworkUtilities.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(NetworkUtilities.class.getName()).log(Level.SEVERE, null, ex);
    }

    canvas.drawBitmap(mBitmap, 10, y, p);
}

与之前大致相同,但改变了我绘制到Bitmap的方式。它看起来很漂亮!

相关问题