2011-02-25 3 views
2

저는 Android 게임 개발을 배우기 위해 퍼즐 게임을 씁니다. 그러나 이제 레이아웃 파일의 ImageView에 동적으로 이미지를 추가하는 방법에 대해 고민하고 있습니다 (아래 참조). 나는 무작위 이미지를 각 ImageViews에 추가하는 루프를 만들려고합니다. 그러나 나는 이것을하는 방법에 대한 예제를 찾을 수 없습니다. 내 이미지는 ImageViews와 동일하게 소문자로만 표시됩니다. 또는이를 해결할 수있는 다른 방법이 있습니까? 지금까지이미지를 ImageView에 동적으로 추가하는 방법

내 코드 :

// Puzzle of 2x2 tiles 
    String[] sTiles = {"A0","A1","B0","B1"}; 
    final Random myRandom = new Random(); 

    // Random tiles 
    String tmp = null; 
    for (int i = 0; i < sTiles.length; ++i) { 
     tmp = sTiles[i]; 
     int r = myRandom.nextInt(sTiles.length); 
     sTiles[i] = sTiles[r]; 
     sTiles[r] = tmp; 
    } 

    // Lopp to add images randomly to the screen (layout/main.xml) 
    //for(i=0; i < sTiles.length; ++i) { 
     ImageView image = (ImageView) findViewById(R.id.B0); 
     image.setImageResource(R.drawable.a0); 
    //} 

--------------- 레이아웃/main.xml에 ------------

<TableRow> 
     <ImageView 
      android:id="@+id/A0" 
      android:layout_column="1" /> 
     <ImageView 
      android:id="@+id/A1" 
      android:gravity="right" /> 
    </TableRow> 
    <TableRow> 
     <ImageView 
      android:id="@+id/B0" /> 
     <ImageView 
      android:id="@+id/B1" /> 
    </TableRow> 

감사합니다. Sigurd!

답변

5

드로어 블 및 위젯 ID를 저장하기 위해 몇 가지 int 배열을 설정해보십시오. 리플렉션을 사용하여 이름으로 찾기보다 빠릅니다. 이런 식으로 뭔가 트릭해야한다 : 당신은 모든 ImageViews 고유의 이미지를 얻을 수 있도록하려는 경우 특별한 처리를 추가 할 수 있습니다

int[] imageViews = { 
    R.id.A0, R.id.A1, 
    R.id.B0, R.id.B1, 
    R.id.C0, R.id.C1 //... 
    }; 

int[] images = { 
    R.drawable.a0, R.drawable.a1, 
    R.drawable.b0, R.drawable.b1, 
    R.drawable.c0, R.drawable.c1 //... 
    }; 

Random random = new Random(System.currentTimeMillis()); 

for(int v : imageViews) { 
    ImageView iv = (ImageView)findViewById(v); 
    iv.setImageResource(images[random.nextInt(images.length - 1)]); 
} 

을하지만, 그대로 그 작동합니다.

+0

내 코드에 sTiles.length가 있음을 알았습니다. images.length 있어야합니다. :) 그것을 바 꾸었습니다. – kcoppock

+0

내 앱에이 코드를 사용했지만 임의로 이미지가 변경되지만 일부 이미지는 반복됩니다. 하나의 이미지에 대한 이미지를 원해. 제발 .. 도와주세요. –

0

컨테이너 (선형 또는 상대 레이아웃 일 가능성이 있음)를 만들고보기에 이미지를 추가해야합니다. 예 :

RelativeLayout cbrl = new RelativeLayout(this); 
      RelativeLayout.LayoutParams cbp = new RelativeLayout.LayoutParams(
         LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
       cbVal.setLayoutParams(cbp); 

    for(i=0; i < sTiles.length; ++i) { 
     ImageView image = (ImageView) findViewById(this); 
     image.setImageResource(R.drawable.xX); 
cbrl.addView(iv); 
    } 
0

솔루션 반사와 R.drawable의 값을 읽고 R.에서 필드의 값을 얻어서 비트 맵으로로드됩니다

그것은 뭔가 같은 :

public static void example() throws IllegalArgumentException, IllegalAccessException{ 
     Class<R.drawable> clazz = R.drawable.class; 
     for(Field field : clazz.getDeclaredFields()){ 
      Bitmap bmp = BitmapFactory.decodeResource(getResources(), (Integer) field.get(null)); 
      //bmp is your image 
     } 
    } 
관련 문제