我扩展了View类,以便拥有一个包含所需背景的“可绘制”视图。
问题是当这个类在其他活动(同一个应用程序)中正常工作时。
这是扩展View的类:
public class BackgroundMap extends View {
private String strmap;
private int totalWidth;
public BackgroundMap(Context context, String map, int w, int h) {
super(context);
super.setLayoutParams(new LayoutParams(w, h));
totalWidth = w;
strmap = map;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Resources res = getResources();
int eachBoxSize = totalWidth/10;
float left = 0;
float top = 0;
Paint paint = new Paint();
for(char c : strmap.toCharArray()){
Bitmap bm = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(res, Terrain.getResource(c)), eachBoxSize, eachBoxSize, false);
canvas.drawBitmap(bm, left, top, paint);
if(left == totalWidth - eachBoxSize){
left = 0;
top += eachBoxSize;
}else{
left += eachBoxSize;
}
}
}
}
此视图的工作方式如下:somelayout.addView(new BackgroundMap(arg ..));
String map参数表示一个指向几个小png图像的地形(char)id数组。
这就是我在我的活动中使用它的方式:
ly_rbtn_image = (FrameLayout) findViewById(R.id.ly_rbtn_image);
ly_rbtn_image.post(new Runnable() {
@Override
public void run() {
imagewidth = ly_rbtn_image.getWidth();
ly_rbtn_image.addView(new BackgroundMap(getApplicationContext(), str, imagewidth, imagewidth));
}
});
我用logcat检查父布局的宽度,它有225px。正如您所看到的,下面的图像只构建了第一行位图...但这不是一个循环问题
如果这里出现问题,我会在onDraw方法的自定义视图循环中检查,但它会迭代整个字符串(100个字符,10x10位图)
希望你能帮助我:S答案 0 :(得分:1)
解决。请删除我。
位图被推到右边直到循环结束。所以事实上,我不知道为什么会这样。
直到我检查了LOGCAT x)中结果视图的边界))视图宽度为2000像素,高度为20 ......我们去了:
当我得到设备的总宽度时,随便是一个可被10整除的数字(10x10网格),所以事实上幸运的是之前没有这个问题(在其他视图中构建相同的地图)。
然后,问题是需要在另一个视图中打印相同的地图(或网格),而不是设备宽度,因此总宽度(父宽度)不能被网格的列数整除(我很惭愧x))。