我正在尝试创建一个可以在画布上绘制的图像数组。这就是我所拥有的:
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);
}
答案 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);