在画布上创建图像数组

时间:2013-02-04 13:33:22

标签: android arrays arraylist android-canvas

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

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);
        }

2 个答案:

答案 0 :(得分:1)

您所做的是最初将一堆整数添加到ArrayList,然后尝试使用此整数标识的资源循环遍历此ArrayList并绘制Bitmap。问题是drawBitmap类中Canvas方法的第一个参数必须是整数颜色数组或Bitmap资源。不只是一个整数,指向一个整数。有关详细信息,请check the documentation

为了通过ID获取特定资源作为Bitmap,您需要这样做:

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);
}

答案 1 :(得分:0)

洛尔!检查canvas.drawBitmap第一个参数是一个Bitmap对象,而你只有指向资源的整数。

您可以使用:

canvas.drawBitmap(BitmapFactory.decodeResource(getContext().getResources(), imageHolder.get(i)), 0, 0, null);