web-dev-qa-db-fra.com

comment obtenir des images dynamiquement à partir d'un dossier pouvant être dessiné

J'ai un tableau comme celui-ci.

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 ce moment, j'ai 6 images, donc on me donne le nom de manière statique.

Si j'ai environ 50 images, je ne peux pas donner chaque nom de fichier dans le tableau, il doit donc être dynamique, comment puis-je y parvenir.

45
Goofy

Vous pouvez utiliser getIdentifier()

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

Vous pouvez aussi utiliser ceci:

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

Quelque chose comme ça pourrait marcher

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

Utilisez la ligne suivante pour pouvoir dessiner dynamiquement:

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

Cela vous donnera le Drawable désiré.

2
SAMD
public static Drawable getImage(Context context, String name) {
        return context.getResources().getDrawable(context.getResources().getIdentifier(name, "drawable", context.getPackageName()));
}
2
Ali Imran
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()));
    }
}
1
Abbath

Nous pouvons tirer parti de la méthode imageview setImageResource, car celle-ci sera plus efficace que l’attrait, semble-t-il, reportez-vous au code ci-dessous.

Le code ci-dessous peut être utilisé pour afficher l'image comme gif si vous avez l'image divisée en plusieurs parties de gif. Séparez simplement le gif en png individuel à partir d'un outil en ligne et mettez l'image dans le dessin comme dans l'ordre ci-dessous

image_1.png, image_2.png, etc. 

Demandez au gestionnaire de modifier l'image dynamiquement.

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
Lakshmanan
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
Anwar shanib