在画布上绘制时,不显示可绘制对象

时间:2018-08-16 17:05:55

标签: android android-canvas android-drawable

我正在构建一个需要绘制网格并将图像添加到各个单元格的应用程序。大约有10种不同的图像,全部为.png格式。有一个数组,允许应用程序在每个网格正方形上循环并检查该正方形是否应有图像,如果有,则应显示哪个图像。如果正方形中应该有图像,则将其绘制如下:

    for (int rr = 0; rr < numRows; rr++) {

        for (int cc = 0; cc < numCols; cc++) {

            // Find out what should be in this grid square
            CellImage thisCellImage = mChart.returnCellImage(rr,cc);

            if(thisCellImage == null) continue;

            // Find the drawable from the baseName
            String drawableName = thisCellImage.getName();
            Resources resources = mContext.getResources();
            int resourceId = resources.getIdentifier(drawableName,
                            "drawable",
                            mContext.getPackageName());
            Drawable d;

            if(resourceId != 0) {
              if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                 d = resources.getDrawable(resourceId, mContext.getTheme());
               } else {
                 d = resources.getDrawable(resourceId);
               }

               // Calculate the position of the top left grid square
               float posX = minX + ((numCols - cc - 1) * cell_width);
               float posY = minY + ((numRows - rr - 1) * cell_height);

               // Now draw the image into the square
               if (d != null) {
                  d.setBounds(Math.round(posX), Math.round(posY),
                               Math.round(posX + cell_width),
                               Math.round(posY + cell_height));
                  d.draw(canvas);
               }
            }
        }
     }

问题是网格上没有任何内容。我从调试器中看到可以找到可绘制对象;为posX和posY计算的值看起来很合理(它们肯定在网格内,因此即使它们不是完全准确,绘制对象也应该在某个位置可见)。

网格使用以下方法添加了背景色:

mPaint.setColor(bgColour.returnHexCode());
canvas.drawRect(minX, minY, maxX, maxY, mPaint);

我已经尝试过迈出这一步(以防万一,背景隐藏了可绘制对象或其他东西,但没有任何区别;我只是在这里包括它,以防可能相关。

有什么想法我要去哪里吗?我真的不知道从drawables开始。

编辑

CellImage的定义如下:

public class CellImage {

    private String name, description;

    // CONSTRUCTOR
    public CellImage() {}

    // GETTERS
    public String getName()         { return name; }
    public String getDescription()  { return description; }

    // SETTERS
    public void setName(String thisName)            { this.name = thisName; }
    public void setDescription(String thisDesc)     { this.description = thisDesc; }

}

CellImage的名称与可绘制文件的名称相同。例如,如果CellImage名称是“ example”,则可绘制对象将是“ example.png”。

可绘制对象的示例是: circle.png drawable

(大多数图像都比该图像复杂一些,所以我不能直接画圆。它们都保存为64px x 64px png)

1 个答案:

答案 0 :(得分:0)

原来,图像是在白色背景上以白色绘制的...我将在这里留下问题,以防它节省了其他人几个小时的时间。