您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> Android >> Android画图问题

Android画图问题

来源:网络整理     时间:2016/5/5 8:52:54     关键词:Android

关于网友提出的“Android画图问题”问题疑问,本网通过在网上对“Android画图问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题:Android画图问题
描述:

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

  我想在屏幕上画出教室座位图,先上代码在说问题。
public class SeatData {
public static final int ROWS=20;//多少排
public static final int SEATS=8;//每一排座位数
public static final int LEFT=5;//每一排开始位置
public static final int EDN=20;//每一排结束位置
public static final int TOP=5;//上下排间距
// public static final int BOTTOM=20;//底部宽
public static final int ALIGN=30;//走道宽度
public static final int RIGHT=40;//座位图片宽度
public static final int BOTTOM=40;//座位图片高度
public static final int IMG_WIDTH=10;//座位图片间宽度
}

主要画图逻辑:

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.view.View;
public class DrawAction extends View {
Paint paint;
Bitmap bitmap;
public DrawAction(Context context) {
super(context);
// TODO Auto-generated constructor stub
paint = new Paint();
paint.setAntiAlias(true);
bitmap = loadBitmap(R.drawable.icon);
}
public Bitmap loadBitmap(int fied){
Drawable drawable = this.getContext().getResources().getDrawable(fied);
Bitmap bitmap2 = Bitmap.createBitmap(SeatData.RIGHT, SeatData.BOTTOM,Bitmap.Config.ARGB_8888 );
Canvas canvas = new Canvas(bitmap2);
drawable.setBounds(SeatData.LEFT, SeatData.TOP, SeatData.RIGHT, SeatData.BOTTOM);
drawable.draw(canvas);
return bitmap2; 
}
@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<>
for(;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;
}
}
}

我现在只能画出第一排,在画第二排就显示不出来,也不报错。我目前就是感觉逻辑有问题。求指点。
目前我不是很明白的几点是:
一、上面这段代码是不是先创建一个Bitmap,这个Bitmap的大小已经指定,然后再创建一个Canvas,大小和那个Bitmap一样(就是刚好包裹?)。那个drawable.setBounds是不是就是一个框架,就像相框,镶嵌照片的(是不是在写出这个方法的时候图片就已经被放进去了?)。最终把这样一个drawable画到canvas上。
二、有几个方法参数不大理解准确含义。
   1、drawable.setBounds:这里面的4个参数,是相对于Bitmap、屏幕、canvas哪一个来定位的。
   2、Bitmap.createBitmap(SeatData.RIGHT, SeatData.BOTTOM,Bitmap.Config.ARGB_8888 );有时候这个bitmap我定义的width和hight小于图片好像也可以显示,他的大小是相对于谁来参考的。
   3、canvas.drawBitmap(bitmap, j, top, paint);这里面的j和top参数又是相对于谁来参考的。

解决方案1:

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

解决方案2:

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

解决方案3:

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


以上介绍了“Android画图问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/915591.html

相关图片

相关文章