批处理在Android上获取许多位图资源
我有一系列的图形——icon1_0.png,icon1_1.png,icon1_2.png…,icon12_0.png,icon12_1.png,icon12_2.png——我想把它们和我的android应用程序打包。理想情况下,我认为应该能够将它们作为资源加载,但资源id被设置为java标识符。当然,java标识符不能在运行时组装。我必须要求R.drawable.icon12_00,因此我无法设置循环批处理在Android上获取许多位图资源,android,resources,Android,Resources,我有一系列的图形——icon1_0.png,icon1_1.png,icon1_2.png…,icon12_0.png,icon12_1.png,icon12_2.png——我想把它们和我的android应用程序打包。理想情况下,我认为应该能够将它们作为资源加载,但资源id被设置为java标识符。当然,java标识符不能在运行时组装。我必须要求R.drawable.icon12_00,因此我无法设置循环 for(int icon=0;icon<12;icon++) for(int fra
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");
for(int icon=0;icon使用getResources().getIdentifier()
来自上下文(例如,活动
),但如果要多次使用,请缓存结果。getIdentifier()
是在上实现的。我知道您已经找到了答案,但是如果使用反射,您将看到速度有了很好的提高,如getIdentifier()比较慢。我写过如何使用反射方法。但是,这仅在您访问自己的资源时有效。反射速度也非常慢,您应该创建一个包含所有标识的数组。好的,这很有效。getIdentifier(“resname”、“restype”、“com.domain.appname”);谢谢。您可以使用getPackageName()
而不是将包名作为静态值传递,您的意思是,用代码写出整个循环吗?或者更聪明的方法?我对后者感兴趣,因为如果我可以比使用反射更快地获得资源,这将是一个很好的速度提升(但这将是一种稍微不同的情况,应用程序数据指的是资源,而不是代码)。@DanielLew他说你有一个代码生成器,可以用代码将整个循环写出来。这样做怎么样。速度稍微快一点。但遗憾的是,因为反射是出了名的脆弱,所以getIdentifier必须非常慢。