2012-02-06 14 views
42

Ho una matrice come questa.come ottenere immagini dinamicamente dalla cartella estraibile

int image[] = {R.drawable.d002_p001,R.drawable.d002_p002,R.drawable.d002_p003, 
        R.drawable.d002_p004,R.drawable.d002_p005,R.drawable.d002_p006}; 

In questo momento ho 6 immagini quindi mi viene assegnato il nome in modo statico.

Se si dispone di 50 immagini, non è possibile assegnare ogni nome di file all'array in modo che sia dinamico come posso ottenerlo.

+0

un'occhiata a questo [Tutorial] (http://www.anddev.org/viewtopic.php?t=575) Speranza che aiuta !! –

risposta

104

È possibile utilizzare getIdentifier()

for (int j = 1; j < 6; j++) { 
    Drawable drawable = getResources().getDrawable(getResources() 
        .getIdentifier("d002_p00"+j, "drawable", getPackageName())); 
} 
+0

Come salvare da quel 'drawable' a un array di stringhe? –

+0

Richiede il livello API 21 per getDrawable –

+1

@TomBrito Utilizzare ContextCompat.getDrawable (contesto, res). Vedi http: // StackOverflow.it/a/34132342/4830897 – SleepProgger

-9

uso di questo codice per creare array e poi utilizzare tale matrice

int image[] = new int[50]; 
for (int i = 1 ; i <= 50 ; i++) 
{ 
images[i] = "R.drawable.d002_p00"+i; 
} 

cosa principale che si deve prendere cura è il nome del file deve iniziare con "d002_p00" questo e dopo c'è cifre 1 a 50

+1

mi mostra errore tizio "R.drawable.d002_p00" + i; non posso convertire da int a stringa – Goofy

+5

questa risposta è davvero pessima ... hai imparato java ?? A 'String' non può essere assegnato a una variabile int ... e un int non può essere aggiunto a una stringa senza usare' String.valueof() '... – maysi

+0

Mr.dilipkaklotar un po 'di codice sbagliato quindi cambia qui e aggiorna il tuo post –

2

utilizzare la seguente riga per ottenere drawable dinamico:

Drawable drawable = this.getResources().getDrawable(R.drawable.yourDrawableID); 

Questo vi darà la drawable desiderato.

+0

qual è yourDrawableID qui – Goofy

+0

'yourDrawableID' è il valore effettivo di' ID' che hai specificato per l'elemento nel file di layout (xml). – astuter

6

Qualcosa di simile potrebbe funzionare

Field[] drawables = android.R.drawable.class.getFields(); 
for (Field f : drawables) { 
    try { 
     System.out.println("R.drawable." + f.getName()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

Questo mi ha permesso di ottenere tutti i drawable. Ho inserito tutto in un Hashmap per un accesso più semplice in seguito: KEY = f.getInt (f.getName()) + VALUE = f.getName() – user4500

11

È anche possibile utilizzare questo:

int res = getResources().getIdentifier("<your pakecgename>:drawable/abc", null, null); 
+0

Usando '" drawable ", getPackageName()' invece di 'null, null' è meno soggetto a errori –

2
public static Drawable getImage(Context context, String name) { 
     return context.getResources().getDrawable(context.getResources().getIdentifier(name, "drawable", context.getPackageName())); 
} 
1
String[] names = new String []{"yout names..."}; 
    for(String n: names) { 
     Utils.GetDrawableByName(n,this); 
    } 

public class Utils { 
public static Drawable GetDrawableByName(String name,Activity context){ 
    Resources res = context.getResources(); 
    return res.getDrawable(res.getIdentifier(name,"drawable",context.getPackageName())); 
    } 
} 
0

Siamo in grado di sfruttare Imageview setImageResource in quanto sarà più efficiente di quanto pare disegnabile, fare riferimento al codice sottostante per lo stesso.

Il seguente codice può essere utilizzato per mostrare l'immagine come gif in caso se si dispone di un'immagine divisa in più di gif. Basta dividere il GIF in png individuo da uno strumento on-line e mettere immagine nel drawable come il seguito ordine

image_1.png, image_2.png, ecc

Avere il gestore di cambiare l'immagine in modo dinamico.

int imagePosition = 1; 
    Handler handler = new Handler(); 
     Runnable runnable = new Runnable() { 
      public void run() { 
       updateImage(); 
      } 
     }; 




    public void updateImage() { 

       appInstance.runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         int resId = getResources().getIdentifier("image_" + imagePosition, "drawable", appInstance.getPackageName()); 
         gifImageViewDummy.setImageResource(resId); 
         imagePosition++; 
    //Consider you have 30 image for the anim 
         if (imagePosition == 30) { 
//this make animation play only once 
          handler.removeCallbacks(runnable); 

         } else { 
    //You can define your own time based on the animation 
          handler.postDelayed(runnable, 50); 
         } 

//to make animation to continue use below code and remove above if else 
// if (imagePosition == 30) 
//imagePosition = 1; 
// handler.postDelayed(runnable, 50); 
// 
        } 
       }); 
       } 
0
package com.example.studio.snakes; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.ImageView; 

import java.util.Random; 

public class MainActivity extends AppCompatActivity { 

int[] dices = { 
     R.drawable.one, 
     R.drawable.two, 
     R.drawable.three, 
     R.drawable.four, 
     R.drawable.five, 
     R.drawable.six, 
}; 


public void rollTapped(View view){ 
Log.i("Button","Button Tapped"); 
    Random rand = new Random(); 
    int randomnum = rand.nextInt(6); 
    Log.i("Random","Random number is " + randomnum); 
    ImageView dice=findViewById(R.id.imageView2); 
    dice.setImageResource(dices[randomnum]); 


} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
} 
+0

Qui ho creato i dadi di array per le immagini nella cartella drawable.E ho accesso a immagini casualmente tramite la generazione di variabili casuali intitolate come randnum (dal codice) .Qui continuo a cambiare l'immagine già esistente (id è imageView2 dal codice) per ogni numero casuale. Ogni volta che tocchiamo un bottone, le immagini verranno generate casualmente –

+0

Hi Anwar shanib, benvenuto in [so] . Si prega di notare che [i commenti sono temporanei e potrebbero essere cancellati in qualsiasi momento] (https://stackoverflow.com/help/privileges/comment). Se hai ulteriori informazioni da fornire, aggiorna la risposta facendo clic sul link ** "[modifica]" ** sotto il post. [Vedi qui] (https://meta.stackexchange.com/q/19756/204869) per i dettagli. Grazie. – Pang

Problemi correlati