我是android开发的新手,一直在尝试画一个由多个不同颜色的小矩形组成的正方形……就像马赛克一样。
基本上,目前我正在从一个文件中读取值,该文件将颜色分配给较小的Rect。我使用了一对嵌套的for循环,试图逐行顺序地绘制小的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);
}这个except来自扩展视图的类,并在活动的onCreate()方法中调用。
我非常感谢大家在这方面的指导,并提前感谢!!
干杯。
发布于 2010-08-07 23:43:29
好了,我把它整理好了!以下是我为解决这个问题所做的:
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);
}与之前基本相同,但改变了我绘制位图的方式。顺便说一句,它看起来很漂亮!
发布于 2010-08-07 22:54:17
您在循环内构造BufferedReader,因此bf.readLine()将始终返回相同的行。尝试将bf和tokens (注意,不鼓励使用StringTokenizer )移出循环。
https://stackoverflow.com/questions/3430824
复制相似问题