Android number1.setImageResource(R.drawable.n +" 1");说明

时间:2015-02-25 03:35:01

标签: android android-drawable

尽可能避免这种情况。如果你真的需要这样做,请退一步重新思考,因为这是一项昂贵的操作,并且可能有更好的方法。

3 个答案:

答案 0 :(得分:2)

您可以使用该方法将字符串转换为int identifier:

public static int getStringIdentifier(Context context, String name) {
    return context.getResources().getIdentifier(name, "drawable", context.getPackageName());
}

将活动作为上下文参数(或任何其他Context实例)传递。然后你可以像往常一样使用getString()方法。

请注意,从字符串到标识符的转换使用反射,因此可能不那么快,因此请谨慎使用。 请参阅:This SO post

使用示例:number1.setImageResource(getStringIdentifier(this,String.valueOf(n+rnd)));

答案 1 :(得分:1)

方法setImageResource期望生成并存储在R文件中的整数,因此将String附加到方法不起作用。

幸运的是,Android确实提供了一种名为getIdentifier

的方法

getResources().getIdentifier("n1", "drawable", this.getPackageName());

这个方法很慢,所以如果你多次调用它,最好在开头将所有资源作为位图加载,然后将ImageView资源设置为当时需要的任何位图

Bitmap[] numbers = new Bitmap[9]   
for(int i=1; i<=9; i++) {
    numbers[i] = BitmapFactory.decodeResource(getResources(), getResources().getIdentifier(("n"+i), "drawable", this.getPackageName()););
}

然后你可以制作一个方法来调用

private void setNumber(int i) {
    image.setImageBitmap(numbers[i]);
}

答案 2 :(得分:1)

如果你只使用那9个drawable,只需创建一个数组来保存那些drawable的资源ID值。

static final int[] RESOURCE_IDS = {
    0, // empty value so that i = 1 corresponds to R.drawable.n1
    R.drawable.n1,
    ...
    R.drawable.n9
};

Random rand = new Random();
int resourceId = RESOURCE_IDS[rand.nextInt(9)+1]; // random integer from 1-9
mImageView.setImageResource(resourceId);