0

我正在尝试创建可以在画布上绘制的图像数组。这就是我所拥有的:

List<Integer> imageHolder = new ArrayList<Integer>(); 
imageHolder.add((int)R.drawable.bus_1);
imageHolder.add((int)R.drawable.bus_2);
imageHolder.add((int)R.drawable.bus_3);

然后我尝试从我的 onDraw 方法访问这样的图像:

protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.BLACK);


        for (int i = 0; i < imageHolder.size(); i++){


            canvas.drawBitmap(imageHolder.get(i), 0, 0, null);
        }


    }

但是我收到一条错误消息,说我的论点不适用于我的 canvas.drawbitmap。有谁知道如何做到这一点?我一直在寻找有关如何做到这一点的解释,但我在任何地方都找不到。

编辑:这就是我如何在屏幕上的不同点打印出 3 张图像:

for (int i = 0; i < imageHolder.size(); i++) {
    bMap = BitmapFactory.decodeResource(res, imageHolder.get(0));
    canvas.drawBitmap(bMap, 100, 100, null);
    bMap2 = BitmapFactory.decodeResource(res, imageHolder.get(1));
    canvas.drawBitmap(bMap2, 500, 100, null);
    bMap3 = BitmapFactory.decodeResource(res, imageHolder.get(2));
    canvas.drawBitmap(bMap3, 900, 100, null);
        }
4

2 回答 2

1

您所做的是您最初将一堆整数添加到 ArrayList,然后您尝试循环通过此 ArrayList 并使用由该整数标识的资源绘制位图。问题是类中drawBitmap方法的第一个参数Canvas必须是颜色的整数数组或位图资源。不只是一个整数,指向一个。有关更多信息,请查看文档

为了通过 ID 作为位图获取特定资源,您需要执行以下操作:

Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.your_drawable_id);

或者在您的情况下,您的循环需要如下所示:

Resources res = getResources(); // Cache them
Bitmap bMap;
for (int i = 0; i < imageHolder.size(); i++){
    bMap = BitmapFactory.decodeResource(res, imageHolder.get(i));
    canvas.drawBitmap(bMap, 0, 0, null);
}
于 2013-02-04T13:44:00.117 回答
0

哈哈!检查canvas.drawBitmap第一个参数是一个位图对象,而您只有指向资源的整数。

您可以使用:

canvas.drawBitmap(BitmapFactory.decodeResource(getContext().getResources(), imageHolder.get(i)), 0, 0, null);
于 2013-02-04T13:36:51.990 回答