2013-03-22 43 views
0

我有,我有5 ImageButtons的要求。我想隨機加載這些5 ImageButtons上的一些60 - 80圖像。我怎樣才能做到這一點?更改圖像隨機按鈕點擊,並觸發相應的監聽

public void setRandomImages(int n){ 
    Random rand = new Random(); 
    int x = rand.nextInt(5)+1; 

    switch (x) { 
    case 1: 
     bt1.setVisibility(View.VISIBLE); 
     bt1.setBackgroundColor(Color.RED); 
     bt1.setOnClickListener(new listener()); 

     bt2.setVisibility(View.VISIBLE); 
     bt2.setBackgroundColor(Color.BLACK); 
     bt2.setOnClickListener(new listener()); 

     bt3.setVisibility(View.VISIBLE); 
     bt3.setBackgroundColor(Color.BLUE); 
     bt3.setOnClickListener(new listener()); 

     bt4.setVisibility(View.VISIBLE); 
     bt4.setBackgroundColor(Color.GREEN); 
     bt4.setOnClickListener(new listener()); 

     bt5.setVisibility(View.VISIBLE); 
     bt5.setBackgroundColor(Color.YELLOW); 
     bt5.setOnClickListener(new listener()); 
     break; 

    default: 
     break; 
    } 

而且相應的加載圖像的onclick,我要玩一些聲音,對我可以使用處理程序。

所有我想知道的是如何引用相應的監聽器所選擇的圖片隨意。

如果我選擇一個圖像,我會播放聲音,然後裝入在它的位置不同的圖像,所有上述過程重複。

我知道這是所有的雜亂,但任何人誰理解我的要求,建議/幫助我。

編輯:

RandomImagePicker.java

public class RandImagePicker extends Activity { 

Handler handler = new Handler(); 
int resId1,resId2,resId3,resId4; 
List<ImageSound> ImageSoundObjs = new ArrayList<ImageSound>(); 
ImageView iv5; 
ImageView img1,img2,img3,img4; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_rand_image_picker); 

    iv5 = (ImageView)findViewById(R.id.image5); 

    createImageAndSoundObjects(); 
    showObjects(); 
} 

private void createImageAndSoundObjects() { 
    ImageSound obj; 

    TypedArray imgs = getResources().obtainTypedArray(R.array.random_imgs); 
    for(int i = 0 ; i <= 12 ; i++) { 

     obj = new ImageSound(imgs.getResourceId(i, 1)); 
     ImageSoundObjs.add(obj); 
    } 
} 

private void showObjects() { 
    Random rand = new Random(); 
    img1 = (ImageView) findViewById(R.id.image1); 
    img2 = (ImageView) findViewById(R.id.image2); 
    img3 = (ImageView) findViewById(R.id.image3); 
    img4 = (ImageView) findViewById(R.id.image4); 

    for(int i = 0 ; i <= 12 ; i++) { 
     int n1 = rand.nextInt(12)+1; 
     int n2 = rand.nextInt(12)+1; 
     int n3 = rand.nextInt(12)+1; 
     int n4 = rand.nextInt(12)+1; 

     resId1 = ImageSoundObjs.get(n1).getResourceId(); 
     img1.setImageResource(resId1); 
     img1.setOnClickListener(new Listener()); 

     resId2 = ImageSoundObjs.get(n2).getResourceId(); 
     img2.setImageResource(resId2); 
     img2.setOnClickListener(new Listener()); 


     resId3 = ImageSoundObjs.get(n3).getResourceId(); 
     img3.setImageResource(resId3); 
     img3.setOnClickListener(new Listener()); 

     resId4 = ImageSoundObjs.get(n4).getResourceId(); 
     img4.setImageResource(resId4); 
     img4.setOnClickListener(new Listener()); 
    } 

} 

class Listener implements OnClickListener{ 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 


     handler.postDelayed(new Runnable() { 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 

       img1.setVisibility(View.VISIBLE); 
       img2.setVisibility(View.VISIBLE); 
       img3.setVisibility(View.VISIBLE); 
       img4.setVisibility(View.VISIBLE); 
       showObjects(); 
       iv5.setVisibility(View.GONE); 
      } 
     }, 1000); 

     img1.setVisibility(View.GONE); 
     img2.setVisibility(View.GONE); 
     img3.setVisibility(View.GONE); 
     img4.setVisibility(View.GONE); 

     if (v.getId() == R.id.image1) { 
      iv5.setVisibility(View.VISIBLE); 
      iv5.setImageResource(resId1); 
     } else if (v.getId() == R.id.image2) { 
      iv5.setVisibility(View.VISIBLE); 
      iv5.setImageResource(resId2); 
     } else if (v.getId() == R.id.image3) { 
      iv5.setVisibility(View.VISIBLE); 
      iv5.setImageResource(resId3); 
     } else if (v.getId() == R.id.image4) { 
      iv5.setVisibility(View.VISIBLE); 
      iv5.setImageResource(resId4); 
     } 

    } 

} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.rand_image_picker, menu); 
    return true; 
} 

}

ImageSound.java

public class ImageSound { 
int mResourceId; 
ImageSound(int i) { 
    mResourceId = i; 
} 

public int getResourceId() { 
    return mResourceId; 
} 

}

+0

我建議,創建一個類的ImagePath和聲音與它相關聯爲類的屬性。用適當的值相應地創建這些對象並創建這些對象的列表。使用rand()從列表中隨機選擇項目。 – sat 2013-03-22 11:32:05

回答

1

我創建了一個非常基本的例子展示你如何隨機選擇圖像,這可以通過向對象添加屬性來擴展,就像你的情況一樣。

它只是一個快速的10分鐘原型的東西,點擊這裏。

https://github.com/sathvik87/RandomImage

+0

謝謝噸Sathvik,你幫了我很多,但我的主要要求是,我想爲該圖像播放相應的聲音。例如,如果我點擊隨機圖像中的一個,說,獅子,我想玩「獅子的吼叫」,如果貓被點擊,相應的聲音....就像那樣。在你提供的代碼中,它是有限的只能加載圖片。我有Set Listener ,它正在工作。但我怎樣才能設置匹配聲音請。 – sai 2013-03-23 08:11:38

+0

您可以從中取出它,在ImageSound類中添加另一個屬性(變量),它是對聲音的引用,並在類似於resourceId的構造函數中初始化它。你應該可以從那裏做到。 – sat 2013-03-23 09:52:54