Рисование нескольких фигур с помощью цикла - Android Canvas - PullRequest
0 голосов
/ 07 августа 2010

Я очень новичок в разработке для Android и пытался нарисовать квадрат, состоящий из множества меньших прямоугольников разных цветов ... По сути, как мозаика.

В основном на данный момент я читаю значения из файла, который назначает цвет меньшим объектам. Я использую пару вложенных циклов 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 и вызывается внутри метода onCreate() в Activity.

Буду признателен за любые указания в этом, и заранее спасибо !!

Приветствие.

Ответы [ 2 ]

3 голосов
/ 07 августа 2010

Вы создаете BufferedReader внутри циклов, поэтому bf.readLine() всегда будет возвращать одну и ту же строку. Попробуйте переместить bf и tokens (помните, что использование StringTokenizer не рекомендуется) из циклов.

0 голосов
/ 07 августа 2010

Хорошо, я понял это!Вот что я сделал, чтобы решить эту проблему:

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);
}

То же самое, что и раньше, но изменил способ рисования на растровое изображение.Это выглядит красиво, кстати !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...