2010-01-24 11 views
5

Ho una lunga serie di elementi grafici - icon1_0.png, icon1_1.png, icon1_2.png ..., icon12_0.png, icon12_1.png, icon12_2.png - e I ' Mi piacerebbe impacchettarli con la mia applicazione Android. Idealmente penso che dovrei essere in grado di caricarli come risorse ma gli ID delle risorse sono impostati come identificatori java. Ovviamente, gli identificatori java non possono essere assemblati in fase di runtime. Devo chiedere R.drawable.icon12_00 quindi non posso impostare un cicloBatch che ottiene molte risorse bitmap su Android

for(int icon=0;icon<12;icon++) 
for(int frame=0;frame<3;frame++) 
    //syntax error obviously 
    BitmapFactory.decodeResource(getResources(), R.drawable."icon" + icon + "_" + frame + ".png"); 

Quindi non v'è alcun modo per ottenere le risorse con i loro nomi? Meglio ancora, c'è un modo canonico al di fuori del sistema delle risorse per confezionare i file di dati in un pacchetto di applicazioni Android in modo che io possa ottenere a loro?

Sto pensando al riflesso ma non mi sembra la soluzione giusta.

risposta

13

Utilizzare getResources().getIdentifier() dal numero Context (ad esempio Activity), ma si prega di memorizzare nella cache il risultato se lo si utilizzerà più volte. getIdentifier() è implementato su Resources.

+0

Ok, questo funziona. getIdentifier ("resname", "restype", "com.domain.appname"); Grazie. – Brian

+1

Invece di passare il nome del pacchetto come valore statico, puoi usare 'getPackageName()' –

6

So che hai già trovato una risposta, ma se usi la riflessione, vedrai un buon aumento della velocità, dato che getIdentifier() è più lento. Ho scritto su come eseguire il metodo di riflessione here. Tuttavia, questo funziona solo se accedi alle tue risorse.

+0

Che ne dici di questo. Questo è un po 'più veloce. È una vergogna, però, perché il riflesso è notoriamente pokey, quindi l'identificatore deve essere un mostro lento. – Brian

2

La riflessione è anche molto lenta, dovresti semplicemente creare un array con tutti i tuoi identificativi.

+2

Vuoi dire, basta scrivere l'intero ciclo in codice? O qualcosa di più intelligente? Sarei interessato a quest'ultimo, perché sarebbe un bel aumento di velocità se potessi ottenere una risorsa ancora più veloce rispetto all'utilizzo di reflection (ma questo sarebbe in una circostanza leggermente diversa, dove i dati delle app si riferiscono alle risorse - non nel codice) . –

+0

@DanielLew sta dicendo che hai un generatore di codice che scrive l'intero ciclo in codice per te – Pacerier

Problemi correlati