如何简化 Android 图片的 switch-case?
How to simplify switch-case for Android images?
假设我在 Android 中有一个很长的 switch(case)
块,我在循环中定义我的图像:
for(i=0;i<49;i++){
switch(i)
{
case 0:
imageFile.setBackgroundResource(R.drawable.img0);
break;
case 1:
imageFile.setBackgroundResource(R.drawable.img1);
break;
(...)
}}
是否有任何其他解决方法来简化它?
我想你可以把它放在 Array
中作为 class:
的静态字段
static int[] images = {R.drawable.img0,R.drawable.img1,R.drawable.img2...};
然后:
for(i=0;i<49;i++){
imageFile.setBackgroundResource(images[i]);
}
对我来说,hashmap 在你的情况下看起来更好。我认为。
在您的情况下,将第一项替换为编号,将第二项替换为资源。
HashMap map = new HashMap();
map.add( "cat", "Meow" );
map.add( "ape", "Squeak" );
map.add( "dog", "Woof" );
map.add( "bat", "Squeak" );
System.out.println( map );
System.out.println( "map.count( dog ) = " + map.count( "dog" ) );
HashMapIterator i = map.find( "dog" );
if ( i.equals( map.end() ) ) // A simpler way: if ( i.atEnd() ) ...
System.out.println( "Could not find dog." );
else
System.out.println( "Found " + i.get() );
System.out.println( "map.remove( dog ) = " + map.remove( "dog" ) );
HashMapIterator j = map.find( "dog" );
if ( j.atEnd() ) // A simpler way: if ( j.equals( map.end() ) ) ...
System.out.println( "Could not find dog." );
else
System.out.println( "Found " + j.get() );
}
如果您不想在 xml 或您的代码中定义数组,您可以使用类似这样的东西
Resources res = getResources();
//assuming all your images name start with img
for(int i=0;i<49;i++){
int id = res.getIdentifier("img" + i, "drawable", getPackageName());
imageFile.setBackgroundResource(id);
}
希望对您有所帮助
如果你真的想偷懒而不是初始化整个数组,这也可以
注:
use of this function is discouraged. It is much more efficient to retrieve resources by identifier than by name.
for(i=0;i<49;i++){
getResources().getIdentifier("img"+Integer.toString(i), "drawable", getApplicationContext().getPackageName());
}}
我认为这是正确的方法:
private static final int[] IMAGES = new int[]{R.drawable.img0, R.drawable.img1, R.drawable.img2};
不要切换,而是这样做:
for(i=0;i<49;i++){
imageFile.setBackgroundResource(IMAGES[i]);
}
假设我在 Android 中有一个很长的 switch(case)
块,我在循环中定义我的图像:
for(i=0;i<49;i++){
switch(i)
{
case 0:
imageFile.setBackgroundResource(R.drawable.img0);
break;
case 1:
imageFile.setBackgroundResource(R.drawable.img1);
break;
(...)
}}
是否有任何其他解决方法来简化它?
我想你可以把它放在 Array
中作为 class:
static int[] images = {R.drawable.img0,R.drawable.img1,R.drawable.img2...};
然后:
for(i=0;i<49;i++){
imageFile.setBackgroundResource(images[i]);
}
对我来说,hashmap 在你的情况下看起来更好。我认为。 在您的情况下,将第一项替换为编号,将第二项替换为资源。
HashMap map = new HashMap();
map.add( "cat", "Meow" );
map.add( "ape", "Squeak" );
map.add( "dog", "Woof" );
map.add( "bat", "Squeak" );
System.out.println( map );
System.out.println( "map.count( dog ) = " + map.count( "dog" ) );
HashMapIterator i = map.find( "dog" );
if ( i.equals( map.end() ) ) // A simpler way: if ( i.atEnd() ) ...
System.out.println( "Could not find dog." );
else
System.out.println( "Found " + i.get() );
System.out.println( "map.remove( dog ) = " + map.remove( "dog" ) );
HashMapIterator j = map.find( "dog" );
if ( j.atEnd() ) // A simpler way: if ( j.equals( map.end() ) ) ...
System.out.println( "Could not find dog." );
else
System.out.println( "Found " + j.get() );
}
如果您不想在 xml 或您的代码中定义数组,您可以使用类似这样的东西
Resources res = getResources();
//assuming all your images name start with img
for(int i=0;i<49;i++){
int id = res.getIdentifier("img" + i, "drawable", getPackageName());
imageFile.setBackgroundResource(id);
}
希望对您有所帮助
如果你真的想偷懒而不是初始化整个数组,这也可以
注:
use of this function is discouraged. It is much more efficient to retrieve resources by identifier than by name.
for(i=0;i<49;i++){
getResources().getIdentifier("img"+Integer.toString(i), "drawable", getApplicationContext().getPackageName());
}}
我认为这是正确的方法:
private static final int[] IMAGES = new int[]{R.drawable.img0, R.drawable.img1, R.drawable.img2};
不要切换,而是这样做:
for(i=0;i<49;i++){
imageFile.setBackgroundResource(IMAGES[i]);
}