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 № 1Quello 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);