在Android中循环随机图像

时间:2013-03-26 07:49:47

标签: java android xml image random

我是Android / Java开发的初学者。我刚刚开始学习编程,对我来说最简单的方法是修改开源项目以理解所涉及的原理。

无论如何,我想对泡泡射击游戏做一个非常简单的修改,5-10个不同的背景图像将随机循环:

  • 当每个新级别启动时(但在重新启动级别时保持不变)
  • 或者更容易:当关卡重启或启动时,背景每次都在变化

我定义了一个背景drawables的字符串数组:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="random_background"></string-array>
        <item name="background_01">@drawable/background01</item>
        <item name="background_02">@drawable/background02</item>
        <item name="background_03">@drawable/background03</item>
        <item name="background_04">@drawable/background04</item>
        <item name="background_05">@drawable/background05</item>
        <item name="background_06">@drawable/background06</item>
        <item name="background_07">@drawable/background07</item>
        <item name="background_08">@drawable/background08</item>
        <item name="background_09">@drawable/background09</item>
        <item name="background_10">@drawable/background10</item>

</resources>

原始代码定义 SRC 文件夹中 GameView.java 的背景:

  mBackgroundOrig =
    BitmapFactory.decodeResource(res, R.drawable.background, options);

请帮助我为这个想法创建一个简单的方法。

我也有几个问题:

  • xml文件的res /值必须正确吗?我可以使用任何文件名吗?例如: random.xml
  • 我在xml文件中遇到此错误:错误:项目需要'type'属性我是否需要为每个项目设置类型和格式?如果是,请选择什么类型和格式?
  • 我们可以避免超出视频内存限制吗?我的意思是只加载当前背景,并在每次使用之后刷新,然后才会显示新的随机图像。

注意: Bubble Shoot源代码:https://code.google.com/p/bubble-shoot/

背景图片文件名:background01.jpg,background02.jpg等

非常感谢,

1 个答案:

答案 0 :(得分:0)

由于字符串数组是按数字索引的,因此您可以很容易地执行您所描述的内容并使用您喜欢的任何图像。

假设您要小心输入与drawables文件夹中完全相同的名称。

所以你的数组(不需要命名的项目)看起来像

<string-array name="myImages">
    <item>foo</item>
    <item>bar</item>
    <item>image7</item>
    <item>king_kong</item>
</string-array>

等等。 Drawables需要包含图像foo.jpg,bar.jpg等。

现在在你的代码中,你拉出一个介于0和这个数组长度之间的随机数,然后你得到这样的drawable:

int randomNum = Math.floor(Math.random() * getResources().getStringArray(R.array.myImages).length);
Field field = R.drawable.class.getField(getResources().getStringArray(R.array.myImages)[randomNum]);
int imgId = field.getInt(null);

myImg.setImgResource(imgId);

我是从记忆中写的,所以它可能有拼写错误,但你得到了一般的想法。