如何简化使用许多可绘制资源的图像数组

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++;
}