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

时间:2015-02-26 11:06:52

标签: android arrays android-studio drawable increment

我有一个数组,其中包含我的主java代码所需的几个drawable,我用它来在需要时调用它们:

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

感谢。

3 个答案:

答案 0 :(得分:0)

将此方法添加到您的代码中:

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 是一个整数(与您的数组索引相同的整数)。< / p>

像这样:

Bitmap image =
    BitmapFactory.decodeResource(getResources(),
    getResourceID("img_" + mImagesArrayIndex, "drawable", getApplicationContext()));

答案 1 :(得分:0)

我建议您只创建一个包含所有可绘制名称的字符串数组,然后从名称中提取drawable。

我的意思是这样说: -

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());

答案 2 :(得分:0)

有同样的问题。

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