Android number1.setImageResource(R.drawable.n+"1");解释
Android number1.setImageResource(R.drawable.n+"1"); Explanation
尽可能避免这种情况。退后一步,重新考虑您是否真的需要这样做,因为这是一项昂贵的操作,而且可能有更好的方法。
您可以使用方法将字符串转换为int标识符:
public static int getStringIdentifier(Context context, String name) {
return context.getResources().getIdentifier(name, "drawable", context.getPackageName());
}
传入一个 activity 作为上下文参数(或任何其他上下文实例)。然后您可以像往常一样通过 getString() 方法使用标识符。
请注意,从字符串到标识符的转换使用反射,因此可能不会那么快,因此请谨慎使用。
参考:This SO post
使用示例:number1.setImageResource(getStringIdentifier(this,String.valueOf(n+rnd)));
方法 setImageResource
需要生成并存储在 R 文件中的整数,因此将字符串附加到该方法是行不通的。
幸运的是,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]);
}
如果您只使用这 9 个可绘制对象,只需创建一个数组来保存这些可绘制对象的资源 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);
尽可能避免这种情况。退后一步,重新考虑您是否真的需要这样做,因为这是一项昂贵的操作,而且可能有更好的方法。
您可以使用方法将字符串转换为int标识符:
public static int getStringIdentifier(Context context, String name) {
return context.getResources().getIdentifier(name, "drawable", context.getPackageName());
}
传入一个 activity 作为上下文参数(或任何其他上下文实例)。然后您可以像往常一样通过 getString() 方法使用标识符。
请注意,从字符串到标识符的转换使用反射,因此可能不会那么快,因此请谨慎使用。
参考:This SO post
使用示例:number1.setImageResource(getStringIdentifier(this,String.valueOf(n+rnd)));
方法 setImageResource
需要生成并存储在 R 文件中的整数,因此将字符串附加到该方法是行不通的。
幸运的是,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]);
}
如果您只使用这 9 个可绘制对象,只需创建一个数组来保存这些可绘制对象的资源 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);