/ / Creare una serie di immagini su una tela: androide, array, arraylist, canvas android

Creare una serie di immagini su una tela: androide, array, arraylist, canvas android

Sto cercando di creare una serie di immagini che possono essere disegnate su una tela. Questo è quello che ho:

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

Quindi provo ad accedere alle immagini come questa dal mio metodo 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);
}


}

Ma ricevo un errore dicendo che i miei argomenti sononon applicabile per il mio canvas.drawbitmap. Qualcuno sa come fare? Ho cercato dappertutto una spiegazione su come farlo e non riesco a trovarlo da nessuna parte.

EDIT: Ecco come ho funzionato per stampare le 3 immagini in diversi punti sullo schermo:

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

risposte:

1 per risposta № 1

Quello che fai è inizialmente aggiungere un mucchio di interi a un ArrayList e quindi si tenta di scorrere questo ArrayList e disegnare un Bitmap, utilizzando una risorsa identificata da questo intero. Il problema è che il primo argomento al drawBitmap metodo nel Canvas la classe deve essere una matrice di colori intera o una risorsa bitmap. Non solo un numero intero, che punta a uno. Per maggiori informazioni, controlla la documentazione.

Per ottenere una risorsa specifica per ID come Bitmap è necessario eseguire questa operazione:

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

O nel tuo caso il tuo loop deve apparire come questo:

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 per risposta № 2

Lol! Dai un'occhiata canvas.drawBitmap Il primo parametro è un oggetto Bitmap, mentre si hanno solo gli interi che puntano alla risorsa.

Puoi usare:

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