Android绘制自定义视图onDraw()。只画了一半的图像

时间:2014-11-30 01:06:12

标签: android view android-canvas ondraw

我扩展了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

http://deviantsart.com/1afcam8.png

1 个答案:

答案 0 :(得分:1)

解决。请删除我。

位图被推到右边直到循环结束。所以事实上,我不知道为什么会这样。

直到我检查了LOGCAT x)中结果视图的边界))视图宽度为2000像素,高度为20 ......我们去了:

当我得到设备的总宽度时,随便是一个可被10整除的数字(10x10网格),所以事实上幸运的是之前没有这个问题(在其他视图中构建相同的地图)。

然后,问题是需要在另一个视图中打印相同的地图(或网格),而不是设备宽度,因此总宽度(父宽度)不能被网格的列数整除(我很惭愧x))。