我正在尝试启动一个线程,该线程从其资源中获取一个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太大了,我不能使用动画列表,因此我的目标是一次加载一个图像,以确保我有足够的内存。其次,我如何解决迭代资源的问题?
答案 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文件夹中,您只需在文件名中添加一个数字。