本帖最后由 Smile__LV 于 2011-03-22 10:42:42 编辑

解决方案 »

  1.   

    没看出问题,
    一,首先确定一下循环的条件是否都正确,正确的话能画出来的二,
    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为准。
      

  2.   

    canvas.drawBitmap(bitmap, j, top, paint);
    j, top应该是相对于屏幕左上角的位置。
    在onDraw增加Invalidate()试试。
      

  3.   


    谢谢您的指点
    还有个问题,就是比如我一排有8个座位,那么久是说有8个Bitmap,8个canvas?如果我想为这个座位添加文字注释,应该绑定到bitmap上?该如何绑定?
      

  4.   


    谢谢您的指点
    我试了一下,增加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应该是相对于屏幕的左上角位置,只是还为求证。。
      

  5.   

    本程序代码量很少,有人愿意copy上面代码,自己测试一下的么?期待Ing.....
      

  6.   

    本帖子两位大牛显身之后再无他人问津。。
    上面的那个逻辑,最终是不是就是屏幕上放置很多的canvas,canvas上放置bitmap,bitmap上放置drawable?如果是这样,那么这么麻烦是何必呢?如果想控制图片在屏幕上的摆放的位置是控制canvas?还是控制bitmap?还是控制drawable?坐等牛牛们
      

  7.   

    我帮你试着运行了一下,你的两个for循环没有加初始条件。所以内层循环只运行了一次。
    修改为这样就可以了:        for(row=0;row<SeatData.ROWS;row++){
                
                for(seat=0;seat<SeatData.SEATS;seat++){
      ...最好还是规规矩矩写代码,玩花样容易出错。呵呵。
    eclipse下面可以debug的。你可以试试。很简单。
      

  8.   


    谢谢你啊  朋友  我真是没想到 会错在这儿。。我没有Debug,因为他也没报错,我一直认为是画图出错了,,那个变量不是 什么花样,因为我考虑到for里面会用到那个变量,不想再定义了,所以就那样写了。。谢谢你啊,,所有来的都有分啊。。