android studio drawable图像迭代

时间:2015-04-14 19:27:17

标签: java android

我将一些图像放入res / drawable文件夹。它们被命名为(s1.png,s2.png,s3png ..,2n.png)。

我想循环(然后处理)它们。我会这样做:

    for (int i = 1; i < n; i++) {
        HavingFunWithPNGS(R.drawable.s + IntToStr('i'));
    }

当然不是它的运作方式。怎么做的?提前谢谢。

编辑: 我的核心问题是,将文件名字符串转换为android-studio指定的相应RessourceID。

3 个答案:

答案 0 :(得分:1)

扩展@mrek的答案,如果您使用的是shrinkResources,请不要忘记将您的ID添加到保存文件中。否则他们将被删除。

//file res/raw/keep.xml

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:keep="@drawable/s*,@drawable/2n"/>

“*”是一个通配符,所以这将涵盖s1,s2,s3等。

参见http://tools.android.com/tech-docs/new-build-system/resource-shrinking 详情

getResources()getPackageName()Context的方法。您需要引用上下文来使用它们。

答案 1 :(得分:0)

如果你想获得drawable id,可以这样做(将它作为String imageName 传递):

int id = getResources().getIdentifier(imageName, type, package);

如果您想查看代码,请查看this回答。你应该在String变量中传递图像名称,所以我认为你应该这样使用它:

String imageName = "s" + i;

因为它看起来更好,你不需要转换任何东西(java会自动完成)并且它很容易阅读。

答案 2 :(得分:0)

尝试拨打HavingFunWithPNGS(ResUtil.getInstance().getDrawableIdByName(this, String.valueOf("s"+i)))。以下是ResUtil的代码:

public class ResUtil {
private static ResUtil instance;

private ResUtil() {
}

public final static ResUtil getInstance() {
    if (instance == null) {
        instance = new ResUtil();
    }
    return instance;
}

private final int getIdByNames(Context ctx, String resType, String fileName) {
    if (ctx == null || resType == null || fileName == null || "".equals(resType) || "".equals(fileName)) {
        return 0;
    }
    int id = ctx.getResources().getIdentifier(fileName, resType, ctx.getPackageName());
    return id;
}

public final int getAnimIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "anim", fileName);
}

public final int getAnimatorIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "animator", fileName);
}

public final int getArrayIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "array", fileName);
}

public final int getAttrIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "attr", fileName);
}

public final int getBoolIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "bool", fileName);
}

public final int getColorIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "color", fileName);
}

public final int getDimenIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "dimen", fileName);
}

public final int getDrawableIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "drawable", fileName);
}

public final int getFractionIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "fractiont", fileName);
}

public final int getIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "id", fileName);
}

public final int getIntegerIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "integer", fileName);
}

public final int getInterpolatorIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "interpolator", fileName);
}

public final int getLayoutIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "layout", fileName);
}

public final int getMenuIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "menu", fileName);
}

public final int getMipmapIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "mipmap", fileName);
}

public final int getPluralsIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "plurals", fileName);
}

public final int getRawIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "raw", fileName);
}

public final int getStringIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "string", fileName);
}

public final int getStyleIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "style", fileName);
}

public final int getStyleableIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "styleable", fileName);
}

public final int getTransiitonIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "transition", fileName);
}

public final int getXmlIdByName(Context ctx, String fileName) {
    return getIdByNames(ctx, "xml", fileName);
}
}