2013-03-22 61 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