【问题标题】:random genaration of image from drawable folder in android从android中的drawable文件夹随机生成图像
【发布时间】:2013-03-10 20:35:48
【问题描述】:

安卓版本:4.2
我正在开发一个安卓应用程序。我需要从可绘制文件夹随机生成图像。在我的可绘制对象中,我有 45 张不同名称的图像。 我的xml代码是:

<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>

我已尝试使用此代码:

ImageView img=(ImageView)findViewById(R.id.imageView1);
Random rand = new Random();
int rndInt = rand.nextInt(52) + 1;
String drawableName = "photo"+ rndInt;

int resID = getResources().getIdentifier(drawableName, "drawable",  getPackageName());
img.setImageResource(resID);

但是使用此代码,我需要将我的图像名称更改为 photo1photo2,... 我不想这样做。

关于如何实现它的任何建议?谢谢。

【问题讨论】:

    标签: android image random


    【解决方案1】:

    一种方法是创建一个包含所需图像 ID 的数组。并从该数组中随机取一个。该方法在其他答案中进行了解释。

    另一种方法是在项目的values 文件夹中创建文件random_images_array.xml 并像这样填充它:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <array name="apptour">
            <item>@drawable/image_1</item>
            <item>@drawable/photo_2</item>
            <item>@drawable/picture_4</item>
        </array>
    
    </resources>
    

    然后您可以从该 xml 数组中获取随机图像:

    final TypedArray imgs = getResources().obtainTypedArray(R.array.random_images_array);
    final Random rand = new Random();
    final int rndInt = rand.nextInt(imgs.length());
    final int resID = imgs.getResourceId(rndInt, 0);
    

    第三种方法是从 R.drawable 类中获取随机字段:

    final Class drawableClass = R.drawable.class;
    final Field[] fields = drawableClass.getFields();
    
    final Random rand = new Random();
    int rndInt = rand.nextInt(fields.length);
    try {
        int resID = fields[rndInt].getInt(drawableClass);
        img.setImageResource(resID);
    } catch (Exception e) {
        e.printStackTrace();
    }
    

    【讨论】:

    • thanq vasart..第三种形式对我很有帮助。非常感谢。:)
    • hi vasart..有什么方法可以让随机选择哪个字段我的意思是图像名称???
    • 是的,你可以这样做:fields[rndInt].getName()
    • hi vasart..有什么办法可以放异常,这样一些图像不应该参与随机选择????
    【解决方案2】:

    怎么样

    long[] res = {R.drawable.image1, R.drawable.image2};
    

    int[] res = {R.drawable.image1, R.drawable.image2};
    

     int rndInt = rand.nextInt(res .length);
    
    
    
    img.setImageDrawable(getResources().getDrawable(res[rndInt]));
    

    【讨论】:

    • Thanq ngesh。我跟着你的代码,但它向我显示了这个错误:ImageView 类型中的方法 setImageResource(int) 不适用于参数(长)
    【解决方案3】:

    具体说明您的问题 - 您真正想要做什么?

    如果您想以随机顺序显示图像,这将是最好的

            int resId[]={R.drawable.p1,R.drawable.p2,R.drawable.p2};
             Random rand = new Random();
             int index = rand.nextInt((resId.length- 1) - 0 + 1) + 0;
    
             imgView.setImageResource(resId[index]);
    

    如果要对图片的绝对文件路径进行重命名,详见this article

    【讨论】:

      【解决方案4】:
      ImageView img=(ImageView)findViewById(R.id.imageView1);
      String[] imageArray = {"Image1", "Image2", etc..};
      Random rand = new Random();
      
      int rndInt = rand.nextInt(52) + 1;
      int resID = getResources().getIdentifier(imageArray[rand], "drawable",  getPackageName());
      img.setImageResource(resID);
      

      【讨论】:

        【解决方案5】:

        你也必须看到这个问题或答案:-

        Randomize string from resources android

        但你必须更换

        textview.setText()
        

        img.setImageResource(ran.nextInt(trivias.length)]);`
        

        【讨论】:

          【解决方案6】:

          我发现设置一个包含所有可绘制对象的数组,然后通过随机数获取随机索引是可行的。

          public int[] Images = {R.drawable.1, R.drawable.2, R.drawable.3};
          

          然后

          ImageView EightBallImage = findViewById(R.id.EightBallImage);
          EightBallImage.setImageResource(Images[new Random().nextInt(Images.length)]);
          

          在点击侦听器中或仅在 onCreate 方法中

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-06-12
            • 1970-01-01
            • 2012-03-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多