2012-06-04 96 views
0

我有一個活動......名爲img1-> img16的16個圖像。我想要在每個圖像視圖上顯示一個diff圖像,並且這個圖像不能被硬編碼,這取決於傳送的數字是多少,例如, 1,2,3 .....添加到這些視圖的圖像必須不同。爲圖像添加隨機和獨特的圖像android

我現在有代碼,增加了16幅圖像,但這些不是唯一.....他們正在複製...

 int[] imageViews = { 
      R.id.img1, R.id.img2, 
      R.id.img3, R.id.img4, 
      R.id.img5, R.id.img6, 
      R.id.img7, R.id.img8, 
      R.id.img9, R.id.img10, 
      R.id.img11, R.id.img12, 
      R.id.img13, R.id.img14, 
      R.id.img15, R.id.img16 
      }; 

    int[] images = { 
      R.drawable.img1, R.drawable.img2, 
      R.drawable.img3, R.drawable.img4, 
      R.drawable.img5, R.drawable.img6, 
      R.drawable.img7, R.drawable.img8, 
      R.drawable.img9, R.drawable.img10, 
      R.drawable.img11, R.drawable.img12, 
      R.drawable.img13, R.drawable.img14, 
      R.drawable.img15, R.drawable.img16 
      }; 


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

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

還有,如果可能的話,我需要它,以使圖像不硬編碼在圖像數組中,因爲它們將根據傳遞的數字而不同。

所以這些圖像是爲數字1,但如果數字2被傳遞給活動,圖像將是不同的。

所有的細節都保存在本地數據庫中,圖像都在可繪製的文件夾中,並且都將遵循相同的命名方式,例如img1一路說img100 ....

非常感謝提前。

/UPDATE/

嗨,我試圖與下面的代碼:

Random random = new Random(System.currentTimeMillis()); 
    List<Integer> generated = new ArrayList<Integer>(); 
     for(int v : imageViews) 
     { 
      int next = random.nextInt(15) + 1; 
      if (!generated.contains(next)) 
      { 
       generated.add(next); 
       ImageView iv = (ImageView)findViewById(v); 
       iv.setImageResource(images[next]); 
      } 
     } 

我會那樣做完全錯誤在那裏,我想....但到目前爲止,我還沒有找到重複,但沒有幫助的差距,它就好像它可能會產生16個隨機整數,但只增加了獨特的,而不是生成,直到達到16個獨特的圖像,如果你明白了嗎?

在這方面的任何想法?

+0

所以你遇到的唯一問題是當前的方法允許重複? –

+0

是的,有時當你訪問活動,一些圖像丟失,imageview仍然存在,但可能有一個圖像應該是 –

回答

1

每當你得到你的下一個隨機int時,將該值保存在一個數組中。然後下一次你得到一個隨機的int,檢查這個數字是否已經被選中。如果有,重複這個過程,直到選擇了一個非選擇的int。

編輯:試試這個代碼:

Random random = new Random(System.currentTimeMillis()); 
List<Integer> generated = new ArrayList<Integer>(); 
for (int i = 0; i < imageViews.length; i++) { 

    int v = imageViews[i]; 
    int next = random.nextInt(15) + 1; 
    if (!generated.contains(next)) { 
     generated.add(next); 
     ImageView iv = (ImageView) findViewById(v); 
     iv.setImageResource(images[next]); 
    } 
    else { 
     i--; 
    } 
} 
+0

我已更新我的文章的差距......我已經嘗試了一些代碼但如果你看到我原來的帖子,現在我解釋一個問題 –

+0

@ Dean'Amstrad'Woodford嘗試我編輯的代碼 –

+0

只是嘗試了類似的東西,沒有我 - 只是嘗試過你,但都導致同樣的問題,一次你加載它掛在黑屏上的活動幾秒鐘,然後它要求強制關閉....... –