【问题标题】:How do I iterate over a large number of resources with similar names?如何迭代大量具有相似名称的资源?
【发布时间】:2013-01-21 23:53:00
【问题描述】:

我目前正在尝试启动一个线程,该线程从其资源中获取一个可绘制对象并在设定的时间后发布它。然后从资源中获取下一个可绘制对象并从头到尾做同样的事情。

    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();

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

【问题讨论】:

    标签: android android-animation


    【解决方案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 您可以使用完全符合您要求的代码示例找到我对同一问题的答案。

    【讨论】:

    • 然而,Resources.getIdentifier 真的很慢,因为它使用了重度反射(我假设)。在使用这么多可绘制对象时,我强烈建议不要使用它。
    • 谢谢。太棒了。但是有一个问题:这对内存有多大的影响?我在执行此任务时是否需要清理堆?
    • @Thrakbad 刚刚检查了getIdentifier 的实现。它不使用反射并在本机代码中实现,所以我认为你不应该担心它的性能。不管怎样,大部分的执行时间都会被BitmapFactory.decodeResource消耗掉,实际上getIdentifier是如何实现的并不重要。
    • @litemode 它使用的内存量非常小,因为一次只有一个 Drawable 实例。
    • @Thrakbad,哦,讽刺的是,反射比getIdentifierdaniel-codes.blogspot.ru/2009/12/…工作得更快
    【解决方案2】:

    我会将图像放在 assets 文件夹中并从那里加载它们,如下所述:https://xjaphx.wordpress.com/2011/10/02/store-and-use-files-in-assets/

    在资产文件夹中,您可以在文件名中添加一个数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-16
      • 2022-07-11
      • 2011-03-29
      • 2017-02-28
      • 1970-01-01
      • 2013-12-11
      相关资源
      最近更新 更多