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))。

欢迎访问该站点!仅供参考,这个网站不是这样运作的。我们的目标是将问题和答案留在这里,即使问题已经解决,也可以帮助其他用户。我发布了我的答案,对不起,我将进行编辑,以便准确地解释问题在哪里