首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用loop - Android Canvas绘制多个形状

使用loop - Android Canvas绘制多个形状
EN

Stack Overflow用户
提问于 2010-08-07 22:45:01
回答 2查看 4K关注 0票数 0

我是android开发的新手,一直在尝试画一个由多个不同颜色的小矩形组成的正方形……就像马赛克一样。

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

下面是我的一些代码,向你展示我的意思:

代码语言:javascript
复制
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);
}

这个except来自扩展视图的类,并在活动的onCreate()方法中调用。

我非常感谢大家在这方面的指导,并提前感谢!!

干杯。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-07 23:43:29

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

代码语言:javascript
复制
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);
}

与之前基本相同,但改变了我绘制位图的方式。顺便说一句,它看起来很漂亮!

票数 0
EN

Stack Overflow用户

发布于 2010-08-07 22:54:17

您在循环内构造BufferedReader,因此bf.readLine()将始终返回相同的行。尝试将bftokens (注意,不鼓励使用StringTokenizer )移出循环。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3430824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档