![](/img/trans.png)
[英]Some questions on using the canvas in Java to draw shapes and paths for Android?
[英]Draw multiple shapes using loop - Android Canvas
我對android開發非常陌生,一直在嘗試繪制一個由多個不同顏色的較小矩形組成的正方形...本質上就像一個馬賽克。
基本上,目前我正在從文件中讀取值,該文件將顏色分配給較小的Rect。 我正在使用一對嵌套的for循環來嘗試逐行依次繪制小的Rect。 但是,當程序完成時,僅繪制了一個小Rect,這是要繪制的最后一個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()
方法內部調用。
我將不勝感激,並在此先感謝!!
干杯。
您正在循環內構造BufferedReader,因此bf.readLine()
將始終返回同一行。 嘗試將bf
和tokens
移出循環(請注意,不鼓勵使用StringTokenizer)。
好吧,我把它整理好了! 這是我為解決該問題所做的事情:
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);
}
與以前幾乎相同,但更改了我繪制到位圖的方式。 看起來很漂亮!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.