Android访问drawable文件夹

时间:2014-09-02 21:52:17

标签: android image drawable

我在可绘制文件夹中放置了10个图像,然后我创建了一个自定义类,其中的实例持有一个id Integer,它应该将它引用到draw文件夹中的图像。现在我想知道如何设置这些id-s,而不是一个一个。代替:

object[0].setImage(R.drawable.image1);
object[1].setImage(R.drawable.image2);

我想用循环来做这个,但是怎么做?

4 个答案:

答案 0 :(得分:2)

已知的

Drawable ID在final class R的静态类中生成。因此,只需使用反射来读取这些静态属性的值。如果您想获取Int ID,请使用以下代码:

    for(Field f : R.drawable.class.getDeclaredFields()){
        if(f.getType() == int.class){
            try {
                   int id = f.getInt(null);
                   // read the image from the id
            } catch (IllegalAccessException e) {
               e.printStackTrace();
            } catch (IllegalArgumentException e){
                e.printStackTrace();
            }
        }
    }

或者,如果您想直接通过图片搜索'名称,您可能会对以下字段的名称属性感兴趣:

    for(Field f : R.drawable.class.getDeclaredFields()){
        if(f.getType() == int.class){
            try {
                String name = f.getName();
                // rest of the code handling file loading
                } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            }
        }
    }

答案 1 :(得分:1)

根据我的想法不起作用。

有代码可以通过名称获取drawable。例如:"image"+myNumber"

也许:how to access the drawable resources by name in android

答案 2 :(得分:0)

请注意,视图列表的大小应与包含ID的列表匹配:

public class HolderIDs {

public List<Integer> _ids;

public HolderIDs() {
    _ids = new ArrayList<Integer>(Arrays.asList(R.drawable.one, R.drawable.two, R.ldrawable.three, R.drawable.four));
}

public List<Integer> getIDs() {
    return _ids;
}

}

//使用

List<ImageView> views = getYourViews();

List<Integer> ids = new HolderIDs().getIDs();

for (int i = 0; i < ids.size(); i++) {
    View view = views.get(i);
    if (view == null) return;
    int id = ids.get(i);
    view.setBackgroundResource(id);
}

答案 3 :(得分:0)

您可以为资源创建一个整数数组:

int resources = [R.drawable.image1,R.drawable.image2,...]

使用bucle将资源设置到对象数组中。