如何简化使用许多可绘制资源的图像数组
how to simplify an img array that uses many drawable ressources
我有一个数组,其中包含我的主要 java 代码所需的多个可绘制对象,我在需要时使用它来调用它们:
mImagesArray = new int[]{R.drawable.img_0, R.drawable.img_1, R.drawable.img_2,...,R.drawable.img_m}
这种直接实现方法有效,但想象一下,如果我有一个包含 +100 张图像的数组,我会将每个可绘制值从 img_1 调用到最终的 img_100,这非常令人沮丧。
我需要的是一个函数,它使用由 (for i=0;i<m;i++)
定义的增量 int i 值,因此这个函数看起来比我使用的前一个函数简单得多。类似于 mImagesArray = new int[]{R.drawable.img_i}
也许?
我希望你理解我的问题,基本上我想要一个只需要 mImagesArray 的元素数量的全集函数..
编辑 ** mImagesArray 用于:
private void drawImage(Canvas canvas) {
//Get the image and resize it
Bitmap image = BitmapFactory.decodeResource(getResources(),
mImagesArray_ar[mImagesArrayIndex]);
//Draw background
// customWallpaperHelper.setBackground(canvas);
//Scale the canvas
PointF mScale = customWallpaperHelper.getCanvasScale(mImageScale, image.getWidth(), image.getHeight());
canvas.scale(mScale.x, mScale.y);
//Draw the image on screen
Point mPos = customWallpaperHelper.getImagePos(mScale, image.getWidth(), image.getHeight());
canvas.drawBitmap(image, mPos.x, mPos.y, null);
}
谢谢。
将此方法添加到您的代码中:
protected final static int getResourceID
(final String resName, final String resType, final Context ctx)
{
final int ResourceID =
ctx.getResources().getIdentifier(resName, resType,
ctx.getApplicationInfo().packageName);
if (ResourceID == 0)
{
throw new IllegalArgumentException
(
"No resource string found with name " + resName
);
}
else
{
return ResourceID;
}
}
并像这样使用它:
int myID =
getResourceID("your_resource_name", "drawable", getApplicationContext());
注意:如果是图片,则没有路径或扩展名。
您甚至可以不使用 mImagesArray
数组:只需使用 int myID = getResourceID("img_" + i, "drawable", getApplicationContext());
,其中 i 是一个整数(与您使用的整数相同数组索引).
像这样:
Bitmap image =
BitmapFactory.decodeResource(getResources(),
getResourceID("img_" + mImagesArrayIndex, "drawable", getApplicationContext()));
我宁愿建议您只创建一个包含所有可绘制对象名称的字符串数组,然后从名称中提取可绘制对象。
我的意思是类似这样说:-
String[] drawables=new String[100]
for(int i=0;i<100;i++)
drawables[i]="img"+i;
最后,当你想要它时,你会得到这样的名字:-
int drawableResourceId = this.getResources().getIdentifier(drawables[i], "drawable", this.getPackageName());
有同样的问题。
int x,i=0;
While(i<100){
ImageView view = new ImageView(this);
name="img_"+i;
x=getResources().getIdentifier(name, "drawable, getPackageName());
view.setImageResurse(x);
mainActivity.addView(view);
i++;
}
我有一个数组,其中包含我的主要 java 代码所需的多个可绘制对象,我在需要时使用它来调用它们:
mImagesArray = new int[]{R.drawable.img_0, R.drawable.img_1, R.drawable.img_2,...,R.drawable.img_m}
这种直接实现方法有效,但想象一下,如果我有一个包含 +100 张图像的数组,我会将每个可绘制值从 img_1 调用到最终的 img_100,这非常令人沮丧。
我需要的是一个函数,它使用由 (for i=0;i<m;i++)
定义的增量 int i 值,因此这个函数看起来比我使用的前一个函数简单得多。类似于 mImagesArray = new int[]{R.drawable.img_i}
也许?
我希望你理解我的问题,基本上我想要一个只需要 mImagesArray 的元素数量的全集函数..
编辑 ** mImagesArray 用于:
private void drawImage(Canvas canvas) {
//Get the image and resize it
Bitmap image = BitmapFactory.decodeResource(getResources(),
mImagesArray_ar[mImagesArrayIndex]);
//Draw background
// customWallpaperHelper.setBackground(canvas);
//Scale the canvas
PointF mScale = customWallpaperHelper.getCanvasScale(mImageScale, image.getWidth(), image.getHeight());
canvas.scale(mScale.x, mScale.y);
//Draw the image on screen
Point mPos = customWallpaperHelper.getImagePos(mScale, image.getWidth(), image.getHeight());
canvas.drawBitmap(image, mPos.x, mPos.y, null);
}
谢谢。
将此方法添加到您的代码中:
protected final static int getResourceID
(final String resName, final String resType, final Context ctx)
{
final int ResourceID =
ctx.getResources().getIdentifier(resName, resType,
ctx.getApplicationInfo().packageName);
if (ResourceID == 0)
{
throw new IllegalArgumentException
(
"No resource string found with name " + resName
);
}
else
{
return ResourceID;
}
}
并像这样使用它:
int myID =
getResourceID("your_resource_name", "drawable", getApplicationContext());
注意:如果是图片,则没有路径或扩展名。
您甚至可以不使用 mImagesArray
数组:只需使用 int myID = getResourceID("img_" + i, "drawable", getApplicationContext());
,其中 i 是一个整数(与您使用的整数相同数组索引).
像这样:
Bitmap image =
BitmapFactory.decodeResource(getResources(),
getResourceID("img_" + mImagesArrayIndex, "drawable", getApplicationContext()));
我宁愿建议您只创建一个包含所有可绘制对象名称的字符串数组,然后从名称中提取可绘制对象。
我的意思是类似这样说:-
String[] drawables=new String[100]
for(int i=0;i<100;i++)
drawables[i]="img"+i;
最后,当你想要它时,你会得到这样的名字:-
int drawableResourceId = this.getResources().getIdentifier(drawables[i], "drawable", this.getPackageName());
有同样的问题。
int x,i=0;
While(i<100){
ImageView view = new ImageView(this);
name="img_"+i;
x=getResources().getIdentifier(name, "drawable, getPackageName());
view.setImageResurse(x);
mainActivity.addView(view);
i++;
}