使随机生成的ImageButtons可单击

时间:2011-04-04 08:00:42

标签: android imagebutton

我无法将随机生成的图像(被解释为按钮)变为可点击。每个都会导致不同的活动。

随机图像实际上是完美的,唯一的问题是它无法点击。

这是我的Main.java:

public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final List<String> images = new ArrayList<String>();
        for (int i=1; i<=13; i++) {
            images.add("img"+i);
        }
        final Button imgView = (Button)findViewById(R.id.top1);
        String imgName = null;
        int id = 0;

        Collections.shuffle(images, new Random());
        imgName = images.remove(0);
        imageRandomizer(imgName, id, imgView);
   }

    public void imageRandomizer(String imgName, int id, final Button imgView) {
        id = getResources().getIdentifier(imgName, 
                                          "drawable",
                                          getPackageName());  
        imgView.setBackgroundResource(id);
    }

}

在我的布局上,我将ID top1指定为Button。所以上面的代码将查看我的可绘制图像,其名称为 img1.jpg img2.jpg img3.jpg ,直到 img13.jpg

使ImageButton可点击一个活动而不依赖于显示的随机图像很容易,我可以毫无问题地做到这一点。 但我想做的是,当生成 img1.jpg 时,它变得可点击并导致 Activity1.java ,对于 img2.jpg 意图转到 Activity2.java 等。

修改 @Roflcoptr 这是我的OnClickListener:

private OnClickListener top_listener = new OnClickListener() {
        public void onClick(View v) {
             switch((Integer) v.getTag()) {

             case 1: 
             Intent aid = new Intent(Main.this, ProjektAID.class);
             startActivity(aid);

             case 2:
             Intent adh = new Intent(Main.this, ProjektADH.class);
             startActivity(adh);

             case 3:
                 Intent bos = new Intent(Main.this, ProjektBOS.class);
                 startActivity(bos);

             case 4:
                 Intent brot = new Intent(Main.this, ProjektBROT.class);
                 startActivity(brot);

             case 5:
                 Intent care = new Intent(Main.this, ProjektCARE.class);
                 startActivity(care);

             case 6:
                 Intent caritas = new Intent(Main.this, ProjektCARITAS.class);
                 startActivity(caritas);

             case 7:
                 Intent doc = new Intent(Main.this, ProjektDOC.class);
                 startActivity(doc);

             case 8:
                 Intent drk = new Intent(Main.this, ProjektDRK.class);
                 startActivity(drk);

             case 9:
                 Intent give = new Intent(Main.this, ProjektGIVE.class);
                 startActivity(give);

             case 10:
                 Intent hive = new Intent(Main.this, ProjektHIV.class);
                 startActivity(hive);

             case 11:
                 Intent jo = new Intent(Main.this, ProjektJOHANNITER.class);
                 startActivity(jo);

             case 12:
                 Intent kind = new Intent(Main.this, ProjektKINDERHERZ.class);
                 startActivity(kind);

             case 13:
                 Intent kult = new Intent(Main.this, ProjektKULTURGUT.class);
                 startActivity(kult);
             }
        }
       };

这是随机函数方法:

 public void imageRandomizer(String imgName, int id, final Button imgView) {
    id = getResources().getIdentifier(imgName, "drawable", getPackageName());  
    imgView.setBackgroundResource(id);
    imgView.setTag(new Integer(1)); //example for image 1
    if (imgName.equals("img1")) {
        imgView.setTag(new Integer(1)); //example for image 1
     } else if (imgName.equals("img2")) {
        imgView.setTag(new Integer(2));
     } else if (imgName.equals("img3")) {
         imgView.setTag(new Integer(3));
     } else if (imgName.equals("img4")) {
         imgView.setTag(new Integer(4));
     } else if (imgName.equals("img5")) {
         imgView.setTag(new Integer(5));
     } else if (imgName.equals("img6")) {
         imgView.setTag(new Integer(6));
     } else if (imgName.equals("img7")) {
         imgView.setTag(new Integer(7));
     } else if (imgName.equals("img8")) {
         imgView.setTag(new Integer(8));
     } else if (imgName.equals("img9")) {
         imgView.setTag(new Integer(9));
     } else if (imgName.equals("img10")) {
         imgView.setTag(new Integer(10));
     } else if (imgName.equals("img11")) {
         imgView.setTag(new Integer(11));
     } else if (imgName.equals("img12")) {
         imgView.setTag(new Integer(12));
     }
    else if (imgName.equals("img13")) {
        imgView.setTag(new Integer(13));
    }
}

1 个答案:

答案 0 :(得分:1)

我会使用标签来识别按钮。因此,在imateRandomizer中为每个可能的Image添加一个唯一的ID。我不知道如何唯一地识别图像,但我将在这里显示名称的示例:

public void imageRandomizer(String imgName, int id, final Button imgView)
    {
        id = getResources().getIdentifier(imgName, "drawable", getPackageName());  
        imgView.setBackgroundResource(id);

        if (imgName.equals("Name of the Image for your first activity") {
           imgView.setTag(new Integer(1)); //example for image 1
        } else if (imgName.equals("Name of the Image for your second activity") {
           imgView.setTag(new Integer(2));
        }
    }

然后在ClickListener中,您可以检查按钮具有哪个标记:

imgView.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 switch((Integer) v.getTag()) {

                      case 1: //start Activity 1;

                      break;

                      case 2: //start Activity 2;

                      break;
                 }
             }
         });