我将一些图像放入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。
答案 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);
}
}