关于网友提出的“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