遍历Android中的可绘制对象

时间:2018-08-13 14:19:27

标签: java android android-drawable

在Android中,我仅找到关于如何从Drawable打开单个特定 MainActivity.java的答案,但没有找到如何遍历每个Drawable的答案来自res/drawablesDrawable的名称不遵循任何模式(例如,从0到25编号),因此建议的答案here不能解决我的问题。有谁知道该怎么办?

预先感谢您:)

3 个答案:

答案 0 :(得分:0)

首先,将可绘制对象放入数组中

<array name="dashboard_item_menu_drawable">
    <item>@drawable/ic_file_green</item>
    <item>@drawable/ic_email_green</item>
    <item>@drawable/ic_linear_scale_green</item>
    <item>@drawable/ic_undo_green</item>
    <item>@drawable/ic_check_circle_green</item>
    <item>@drawable/ic_archive_green</item>
</array>

然后,迭代数组可绘制对象

val icons = ArrayList<Int>()
val arr = resources.obtainTypedArray(R.array.dashboard_item_menu_drawable)
(0 until arr.length()).forEach {
    // get resource id of each drawable
    val icon = arr.getResourceId(it, -1)
    icons.add(icon)
}

接下来,回收资源

arr.recycle()

然后您可以使用可绘制对象

iconView.setImageDrawable(ContextCompat.getDrawable(this, icons[index]))

答案 1 :(得分:0)

如果您要遍历具有类似名称的可绘制对象,例如image1,image2,...,image10,则可以这样操作:

    for (int i = 0; i < 10; i++) {
        int id = getResources().getIdentifier("image" + i, "drawable", getPackageName());
        Drawable d = ContextCompat.getDrawable(this, id);
        // your code here
    }

答案 2 :(得分:0)

最简单的方法是将可绘制对象的名称放入字符串数组中:

String[] symbols = {"first_img", "second_img", "third_img", "fourth_img"};

然后像这样迭代它们(我将图像放入 GridLayout):

for(String symbol : symbols) {
    int id = getResources().getIdentifier(symbol, "drawable", getPackageName());

    ImageView img = new ImageView(this);
    LinearLayout.LayoutParams imgParams = new LinearLayout.LayoutParams(300, 300);
    imgParams.setMargins(30, 30, 30, 30);
    img.setLayoutParams(imgParams);
    img.setBackgroundResource(id);
    symbolGrid.addView(img);
}