как динамически получать изображения из папки для рисования - PullRequest
46 голосов
/ 06 февраля 2012

У меня есть такой массив.

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

Сейчас у меня 6 изображений, поэтому мне статически дано имя.

Если у меня есть около 50 изображений, я не могу дать каждое имя файла в массиве, поэтому оно должно быть динамичным, как мне этого добиться.

Ответы [ 9 ]

112 голосов
/ 06 февраля 2012

Вы можете использовать getIdentifier()

for (int j = 1; j < 6; j++) {
   Drawable drawable = getResources().getDrawable(getResources()
                  .getIdentifier("d002_p00"+j, "drawable", getPackageName()));
}
12 голосов
/ 06 февраля 2012

Вы также можете использовать это:

int res = getResources().getIdentifier("<your pakecgename>:drawable/abc", null, null);
8 голосов
/ 06 февраля 2012

Как-то так может работать

Field[] drawables = android.R.drawable.class.getFields();
for (Field f : drawables) {
    try {
        System.out.println("R.drawable." + f.getName());
    } catch (Exception e) {
        e.printStackTrace();
    }
}
2 голосов
/ 24 декабря 2013
public static Drawable getImage(Context context, String name) {
        return context.getResources().getDrawable(context.getResources().getIdentifier(name, "drawable", context.getPackageName()));
}
2 голосов
/ 06 февраля 2012

Используйте следующую строку для динамического рисования:

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

Это даст вам желаемый Drawable.

1 голос
/ 22 сентября 2015
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 голосов
/ 09 марта 2018
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 голосов
/ 01 февраля 2018

Мы можем воспользоваться Imageview setImageResource, так как это будет эффективнее, чем кажется рисованным, см. Ниже код для того же.

Приведенный ниже код может быть использован для показа изображения в формате GIF, если у вас есть несколько splitизображение GIF.Просто разделите gif-файл на отдельные png из онлайн-инструмента и поместите изображение в рисованный объект, как показано ниже:

image_1.png, image_2.png и т. Д.

У обработчика для изменения изображениядинамически.

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 голосов
/ 06 февраля 2012

используйте этот код для создания массива, а затем используйте этот массив.

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

. Главное, чтобы вы позаботились о том, чтобы имя файла начиналось с "d002_p00", и после цифры от 1 до 50

...