Android绘制自定义视图onDraw()。只画图像的一半
我正在扩展视图类,以便有一个包含所需背景的“可绘制”视图 问题是这个类在其他活动(同一个应用程序)中工作正常 下面是扩展视图的类:Android绘制自定义视图onDraw()。只画图像的一半,android,view,android-canvas,ondraw,Android,View,Android Canvas,Ondraw,我正在扩展视图类,以便有一个包含所需背景的“可绘制”视图 问题是这个类在其他活动(同一个应用程序)中工作正常 下面是扩展视图的类: public class BackgroundMap extends View { private String strmap; private int totalWidth; public BackgroundMap(Context context, String map, int w, int h) { super(context); sup
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(newbackgroundmap(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个位图)
希望你能帮助我
已解决。请删除我 位图被推到右边直到循环结束。所以事实上,我不知道为什么会这样 直到我在LOGCAT x)中检查结果视图的边界,该视图的宽度为2000像素,高度为20像素。。。好了: 当我得到设备的总宽度时,偶然的是一个可以被10整除的数字(10x10网格),所以事实上很幸运以前没有这个问题(在其他视图中构建相同的地图)
然后,问题是需要在另一个视图中打印相同的地图(或网格),而不是设备宽度,因此总宽度(父宽度)不能除以网格的列数(im x))。欢迎访问该站点!仅供参考,这个网站不是这样运作的。我们的目标是将问题和答案留在这里,即使问题已经解决,也可以帮助其他用户。我发布了我的答案,对不起,我将进行编辑,以便准确地解释问题在哪里