/ / Criando uma matriz de imagens em uma tela - android, arrays, arraylist, android-canvas

Criando uma matriz de imagens em uma tela - android, arrays, arraylist, android-canvas

Eu estou tentando criar uma matriz de imagens que podem ser desenhadas em uma tela. Isso é o que eu tenho:

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

Então eu tento acessar as imagens como esta do meu método 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);
}


}

Mas eu recebo um erro dizendo que meus argumentos sãonão aplicável para o meu canvas.drawbitmap. Alguém sabe como fazer isso? Eu tenho procurado por toda parte para uma explicação sobre como fazer isso e eu não posso encontrá-lo em qualquer lugar.

EDIT: Isto é como eu consegui trabalhar para imprimir as 3 imagens em diferentes pontos na tela:

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

Respostas:

1 para resposta № 1

O que você faz é inicialmente adicionar um monte de inteiros para um ArrayList e, em seguida, você tenta percorrer este ArrayList e desenhar um bitmap, usando um recurso identificado por esse inteiro. O problema é que o primeiro argumento para o drawBitmap método no Canvas class deve ser uma matriz inteira de cores ou um recurso Bitmap. Não apenas um inteiro, apontando para um. Para maiores informações, verifique a documentação.

Para obter um recurso específico por ID como Bitmap, você precisa fazer isso:

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

Ou, no seu caso, o seu loop precisa ficar assim:

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

0 para resposta № 2

Ri muito! Verifica canvas.drawBitmap O primeiro parâmetro é um objeto Bitmap, enquanto você tem apenas os inteiros que apontam para o recurso.

Você pode usar:

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