2012-02-06 4 views
42

У меня есть такой массив.Как получить изображения динамически из папки с возможностью рисования

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 изображений, которые я не могу дать каждому имени файла в массиве, поэтому он должен быть динамическим, как я могу это достичь.

+0

взглянуть на это [Учебник] (http://www.anddev.org/viewtopic.php?t=575) Надеюсь, что это помогает !! –

ответ

104

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

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

Как сохранить из этого 'drawable' в массив String? –

+0

Требуется уровень API 21 для getDrawable –

+1

@TomBrito Используйте ContextCompat.getDrawable (контекст, res). См. Http: // stackoverflow.com/a/34132342/4830897 – SleepProgger

-9

использовать этот код, чтобы создать массив, а затем использовать этот массив

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

главное вы должны заботиться это имя файла должно начинаться с «d002_p00» это и после того, как есть цифра 1 до 50

+1

его показывает мне ошибку чувак «R.drawable.d002_p00» + i; не может преобразовать из int в строку – Goofy

+5

, этот ответ действительно плох ... вы узнали Java? «Строка» не может быть назначена переменной int ... и int не может быть добавлен в строку без использования 'String.valueof()' ... – maysi

+0

Mr.dilipkaklotar некорректный код, поэтому измените наш здесь и обновите post –

2

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

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

Это даст вам желаемую вытяжку.

+0

что такое yourDrawableID здесь – Goofy

+0

'yourDrawableID' - это фактическое значение« ID », указанное вами для элемента в вашем файле макета (xml). – astuter

6

Что-то подобное может работать

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

Это соответствовало мне, чтобы получить все чертежи. Я поместил все в Hashmap для более легкого доступа позже: KEY = f.getInt (f.getName()) + VALUE = f.getName() – user4500

11

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

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

Использование '' drawable ', getPackageName() 'вместо' null, null' меньше погрешности ошибки –

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

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

Этот код может быть использован для отображения картинки, связанной с gif incase, если у вас есть многослойное изображение gif. Просто разделить GIF в индивидуальном формате PNG с онлайн-инструмента и поставить изображение в Drawable как ниже порядка

image_1.png, image_2.png и т.д.

Have обработчик, чтобы изменить изображение динамически.

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

Здесь я создал массивы массивов для изображений в папке с возможностью рисования. И я случайно обратился к изображениям путем генерации случайной переменной под названием как randnum (из кода). Здесь я продолжаю изменять уже существующее изображение (id is imageView2 из кода) для каждого случайного числа. При каждом нажатии на изображение buttom будут генерироваться случайным образом –

+0

Привет Анвар Шаниб, добро пожаловать в [так] , Обратите внимание, что [комментарии являются временными и могут быть удалены в любое время] (https://stackoverflow.com/help/privileges/comment). Если у вас есть дополнительная информация, пожалуйста, обновите свой ответ, щелкнув ссылку ** «[edit]» ** под сообщением. [См. Здесь] (https://meta.stackexchange.com/q/19756/204869). Спасибо. – Pang

Смежные вопросы