如何迭代大量具有相似名称的资源?

时间:2013-01-21 15:24:11

标签: android android-animation

我正在尝试启动一个线程,该线程从其资源中获取一个drawable并在一段时间后发布它。然后从资源中获取下一个drawable并完成同样的事情。

    final ImageView zImageView = (ImageView) findViewById(R.id.zzz_animation_view);
    new Thread(new Runnable() {
        public void run() {
            for(int i = 1; i<=510; i++)
            {
                final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.z_animation0001); // how do I increment this recourse to z_animation0002, 0003, ..., 0510 ?
                zImageView.postDelayed(new Runnable() {
                    public void run() {
                        zImageView.setImageBitmap(bitmap);
                    }
                },200);
            }

        }
    }).start();

首先。这是解决问题的正确方法吗? drawables太大了,我不能使用动画列表,因此我的目标是一次加载一个图像,以确保我有足够的内存。其次,我如何解决迭代资源的问题?

2 个答案:

答案 0 :(得分:1)

您可以使用Resources.getIdentifier按名称获取资源ID:

final int current = 5;
final String pattern = "z_animation%04d";
final String name = String.format(pattern, current);
final int id = getResources().getIdentifier(name, "drawable", getPackageName());
final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), id);

此外,here您可以使用完全符合您要求的代码示例找到相同问题的答案。

答案 1 :(得分:0)

我会将图片放在assets文件夹中并按照此处所述从那里加载:https://xjaphx.wordpress.com/2011/10/02/store-and-use-files-in-assets/

在assets文件夹中,您只需在文件名中添加一个数字。