2012-02-06 12 views
42

Mam taką tablicę.jak dynamicznie pobierać obrazy z folderu do rysowania

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

W tej chwili mam 6 zdjęć, więc statycznie otrzymałem nazwę.

Jeśli mam około 50 zdjęć, nie mogę podać każdej nazwy pliku w tablicy, więc musi być dynamiczna, jak mogę to osiągnąć.

+0

przyjrzeć się tym [Tutorial] (http://www.anddev.org/viewtopic.php?t=575) Mam nadzieję, że to pomaga !! –

Odpowiedz

104

Można użyć getIdentifier()

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

Jak zapisać z tego 'drawable' do tablicy String? –

+0

Wymaga poziomu API 21 dla getDrawable –

+1

@TomBrito Użyj ContextCompat.getDrawable (context, res). Zobacz http: // stackoverflow.com/a/34132342/4830897 – SleepProgger

-9

użyć tego kodu, aby utworzyć tablicę i później wykorzystać tę tablicę

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

Główną rzeczą, którą trzeba zadbać to nazwa pliku musi zaczynać się od „d002_p00” to i po jest cyfra 1 do 50

+1

pokazujący mi błąd "R.drawable.d002_p00" + i; nie można przekonwertować z int na ciąg – Goofy

+5

ta odpowiedź jest naprawdę źle ... nauczyłeś się java ?? Ciąg 'string' nie może być przypisany do zmiennej int ... i nie można dodać int do ciągu bez użycia' String.valueof() '... – maysi

+0

Mr.dilipkaklotar kod jest nieprawidłowy, więc zmień nasze tutaj i zaktualizuj po –

2

użyć następującego wiersza uzyskania rozciągliwej dynamicznie:

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

To daje pożądany rozciągliwej.

+0

co to jest TwójDrawableID tutaj – Goofy

+0

'yourDrawableID' to rzeczywista wartość' ID', którą określiłeś dla elementu w twoim pliku układu (xml). – astuter

6

Coś takiego może działać

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

To pasuje do mnie, aby uzyskać wszystkie rysunki. Umieściłem wszystkie w Hashmapie, aby ułatwić sobie dostęp później: KEY = f.getInt (f.getName()) + VALUE = f.getName() – user4500

11

Można również użyć tego:

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

Użycie '' drawowalnego ', getPackageName() 'zamiast' null, null' jest mniej podatne na błędy –

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

Możemy skorzystać z Imageview setImageResource, ponieważ sprawdzi się to wydajniej niż drawable, odnieś poniższy kod dla tego samego.

Poniższy kod może być użyty do wyświetlenia obrazu podobnego do gif, jeśli masz wiele podzielonych obrazów gif. Wystarczy podzielić na poszczególne png gif z narzędzia online i umieścić obraz na rozciągliwej jak poniżej celu

image_1.png, image_2.png itd

mają obsługi, aby zmienić obraz dynamicznie.

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

Tutaj stworzyłem kostki matrycowe dla obrazów w folderze do rysowania. I miałem dostęp do obrazów losowo poprzez generowanie losowej zmiennej o tytule jako randnum (z kodu) .Tutaj ciągle zmieniam istniejący obraz (id to imageView2 z kodu) dla każdej liczby losowej. Kiedykolwiek dotkniemy obrazu buttom, zostanie wygenerowany losowo –

+0

Witaj Anwar Shanib, witamy w [so] . Pamiętaj, że [komentarze są tymczasowe i mogą zostać usunięte w dowolnym momencie] (https://stackoverflow.com/help/privileges/comment). Jeśli masz dodatkowe informacje do przekazania, zaktualizuj odpowiedź, klikając link ** "[edytuj]" pod postem. [Zobacz tutaj] (https://meta.stackexchange.com/q/19756/204869) w celu uzyskania szczegółowych informacji. Dziękuję Ci. – Pang

Powiązane problemy