【问题标题】:Batch getting many bitmap resources on Android在Android上批量获取很多位图资源
【发布时间】:2010-01-24 22:14:21
【问题描述】:

我有很长的一系列图形——icon1_0.png、icon1_1.png、icon1_2.png...、icon12_0.png、icon12_1.png、icon12_2.png——我想把它们和我的安卓应用。理想情况下,我认为我应该能够将它们作为资源加载,但资源 id 被设置为 java 标识符。当然,java 标识符不能在运行时组装。我必须要 R.drawable.icon12_00 所以我不能设置循环

for(int icon=0;icon<12;icon++)
 for(int frame=0;frame<3;frame++)
  //syntax error obviously
  BitmapFactory.decodeResource(getResources(), R.drawable."icon" + icon + "_" + frame + ".png");

那么有没有办法通过名字来获取资源呢?更好的是,在资源系统之外是否有一种规范的方法可以将数据文件打包到一个 android 应用程序包中,以便我可以获取它们?

我正在考虑反思,但这对我来说似乎不是正确的解决方案。

【问题讨论】:

    标签: android resources


    【解决方案1】:

    使用Context 中的getResources().getIdentifier()(例如Activity),但如果您将多次使用它,请缓存结果。 getIdentifier()Resources 上实现。

    【讨论】:

    • 好的,这行得通。 getIdentifier("resname", "restype", "com.domain.appname");谢谢。
    • 您可以使用getPackageName(),而不是将包名作为静态值传递
    【解决方案2】:

    我知道你已经找到了答案,但是如果你使用反射,那么你会看到一个很好的速度提升,因为 getIdentifier() 更慢。我写了关于如何做反射方法here。但是,这仅在您访问自己的资源时才有效。

    【讨论】:

    • 怎么样。这有点快。不过,这很遗憾,因为反射是出了名的棘手,所以 getIdentifier 一定非常慢。
    【解决方案3】:

    反射也很慢,你应该创建一个包含所有标识的数组。

    【讨论】:

    • 你的意思是,把整个循环写在代码里?或者更聪明的东西?我会对后者感兴趣,因为如果我能比使用反射更快地获得资源,那将是一个很好的速度提升(但这将在稍微不同的情况下,应用程序数据指的是资源——而不是代码) .
    • @DanielLew 他说你有一个代码生成器,可以为你写出整个循环的代码
    猜你喜欢
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 2014-05-08
    相关资源
    最近更新 更多