cómo obtener imágenes dinámicamente desde una carpeta dibujable

Tengo una matriz como esta.

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

En este momento tengo 6 imágenes, así que estoy estáticamente dado el nombre.

Si tengo unas 50 imágenes, no puedo dar todos los nombres de archivos en la matriz por lo que debe ser dynamic, ¿cómo puedo lograr esto?

Puede usar getIdentifier()

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

También puedes usar esto:

 int res = getResources().getIdentifier(":drawable/abc", null, null); 

Algo como esto podría funcionar

 Field[] drawables = android.R.drawable.class.getFields(); for (Field f : drawables) { try { System.out.println("R.drawable." + f.getName()); } catch (Exception e) { e.printStackTrace(); } } 
 public static Drawable getImage(Context context, String name) { return context.getResources().getDrawable(context.getResources().getIdentifier(name, "drawable", context.getPackageName())); } 

Use la siguiente línea para obtener dinámicamente dibujables:

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

Esto le dará el Drawable deseado.

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

Podemos tomar ventaja de Imageview setImageResource, ya que esto será más eficiente de lo que parece dibujar, consulte el código a continuación para el mismo.

El código a continuación se puede usar para mostrar la imagen como gif en caso de que tenga la imagen dividida múltiple de gif. Simplemente divida el archivo .gif en png individual desde una herramienta en línea y coloque la imagen en el dibujo como en el siguiente orden

image_1.png, image_2.png, etc.

Haga que el controlador cambie la imagen dinámicamente.

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

usa este código para crear una matriz y luego usa esa matriz

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

Lo principal que debe tener en cuenta es que el nombre del archivo debe comenzar con "d002_p00" y después de que haya un dígito del 1 al 50