没看出问题, 一,首先确定一下循环的条件是否都正确,正确的话能画出来的二, 1.指定完drawable的bounds后,只会绘制drawable对应bounds范围里的内容。如果drawable关联了bitmap,那就是以bitmap为基准的。 2.createBitmap 在sdk里说得很明白了,是根据Its initial density is as per getDensity().这个密度来决定的。密度可以程序里获取。至于你说就算小了也能绘制,那是有缩放的效果么?应该是以bitmap为大小的,drawable如果setbounds超了这个bitmap的大小,那就画不出来了。 3.canvas.drawBitmap是以第一个参数bitmap的topleft为准。
谢谢您的指点 我试了一下,增加postInvalidate() 和invalidate()都不行,还是只画出一排。我是在这里更新的,每次画完一排,就更新,代码: @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); int seat=0; int j=0; int row=0; int top=5; for(;row<SeatData.ROWS;row++){
一,首先确定一下循环的条件是否都正确,正确的话能画出来的二,
1.指定完drawable的bounds后,只会绘制drawable对应bounds范围里的内容。如果drawable关联了bitmap,那就是以bitmap为基准的。
2.createBitmap 在sdk里说得很明白了,是根据Its initial density is as per getDensity().这个密度来决定的。密度可以程序里获取。至于你说就算小了也能绘制,那是有缩放的效果么?应该是以bitmap为大小的,drawable如果setbounds超了这个bitmap的大小,那就画不出来了。
3.canvas.drawBitmap是以第一个参数bitmap的topleft为准。
j, top应该是相对于屏幕左上角的位置。
在onDraw增加Invalidate()试试。
谢谢您的指点
还有个问题,就是比如我一排有8个座位,那么久是说有8个Bitmap,8个canvas?如果我想为这个座位添加文字注释,应该绑定到bitmap上?该如何绑定?
谢谢您的指点
我试了一下,增加postInvalidate() 和invalidate()都不行,还是只画出一排。我是在这里更新的,每次画完一排,就更新,代码:
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
int seat=0;
int j=0;
int row=0;
int top=5;
for(;row<SeatData.ROWS;row++){
for(;seat<SeatData.SEATS;seat++){
canvas.drawBitmap(bitmap, j, top, paint);
if(seat==1||seat==5){
j=j+20+SeatData.ALIGN;
}else {
j=j+20+SeatData.IMG_WIDTH;
}
}
top+=55;
j=0;
// postInvalidate();
invalidate();
}
}
其实我认为j和top应该是相对于屏幕的左上角位置,只是还为求证。。
上面的那个逻辑,最终是不是就是屏幕上放置很多的canvas,canvas上放置bitmap,bitmap上放置drawable?如果是这样,那么这么麻烦是何必呢?如果想控制图片在屏幕上的摆放的位置是控制canvas?还是控制bitmap?还是控制drawable?坐等牛牛们
修改为这样就可以了: for(row=0;row<SeatData.ROWS;row++){
for(seat=0;seat<SeatData.SEATS;seat++){
...最好还是规规矩矩写代码,玩花样容易出错。呵呵。
eclipse下面可以debug的。你可以试试。很简单。
谢谢你啊 朋友 我真是没想到 会错在这儿。。我没有Debug,因为他也没报错,我一直认为是画图出错了,,那个变量不是 什么花样,因为我考虑到for里面会用到那个变量,不想再定义了,所以就那样写了。。谢谢你啊,,所有来的都有分啊。。