从ImageView获取资源ID

11

我正在尝试开发一个小游戏。

我有一个ViewFlipper,其中包含50个图片(4个图片的随机频率)在ImageViews中。然后我有4个按钮,上面有相同的4张图片,这些图片可以出现在ViewFlipper中。

任务是当正确的图片出现时点击正确的按钮。 (当图片1出现时,必须按下按钮1,依此类推)

我的问题是我不知道如何获取显示的ImageView id。

flipper.getCurrentView().getId() 

返回值为“-1”的Id,但我想要“R.drawable.pic1”的Id。

到目前为止,我的代码如下:

我的加载器方法:

protected void loadPicturesIntoFlipper() {

    Random generator = new Random(); 
    pictures = new ArrayList();

    for(int i = 0; i < 50;i++){

        int number = generator.nextInt(4) + 1;

        if(number == 1){
            pic = R.drawable.pic1;
        }
        if(number == 2){
            pic = R.drawable.pic2;
        }
        if(number == 3){
            pic = R.drawable.pic3;
        }
        if(number == 4){
            pic = R.drawable.pic4;
        }

        pictures.add(pic);  
    }


    for(int i=0;i<pictures.size();i++)
    {

        setFlipperImage((Integer) pictures.get(i));
    }



}

我的插入方法:

private void setFlipperImage(int res) {

    image = new ImageView(getApplicationContext());
    image.setBackgroundResource(res);
    flipper.addView(image);
}

我的检查方法:

protected void check(int number, int id) {
    int code = 0;;

    if(number == 1){
        code = R.drawable.button_tip_finder;
    }
    if(number == 2){
        code = R.drawable.button_about_us;
    }
    if(number == 3){
        code = R.drawable.button_power_calculator;
    }
    if(number == 4){
        code = R.drawable.button_powerpedia;
    }



    if(code == id){
        test.setText(""+id);
    }
    else{
        test.setText(""+id);
    }


}

我称之为:

 button1.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                check(1,flipper.getCurrentView().getId());
                flipper.showNext();

                }
            });

1
R.drawable.pic1 是一个 drawable 的资源 ID,而 .getId() 则返回视图的 ID。 - Simon Forsberg
你想获取ImageView中显示的图片的ID吗? - Blackbelt
我想要获取显示在我的ImageView中的图片的ID,对吗。 - Billabong
这么多的 if :O ??? 你的 else 呢?请使用带有 elseif 来提高效率... - M-Wajeeh
@M-WaJeEh 使用 switch (number) 可以获得更好的效率。或者使用存储可绘制引用的数组。 - Simon Forsberg
2个回答

16

就这样做:

private void setFlipperImage(int res) {
    image = new ImageView(getContext());
    image.setBackgroundResource(res);
    image.setTag(res); //<------
    flipper.addView(image);
}

然后:

button1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                check(1,(Integer)flipper.getCurrentView().getTag());//<----
                flipper.showNext();
            }
        });

顺便提一下,请在您的所有代码中使用else,例如:

 if(number == 1){
      pic = R.drawable.pic1;
 } else if(number == 2){
      pic = R.drawable.pic2;
 }  else if(number == 3){
       pic = R.drawable.pic3;
 }

1

也许这个可以帮到你,

int icon = getResources().getIdentifier([YOUR IMAGE NAME], "drawable",
            getPackageName());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接