我目前正在建立一个自定义进度,如酒吧巴士。
这个程序需要显示巴士从一个地方到另一个地方的进度。
目前进度条正在处理其时间表。
代码是switch语句的一种形式,但是switch语句变得非常长,编程也非常繁琐,我还需要做更多的工作。
有没有办法缩短这个代码?
也许是以循环的形式
Thread t = new Thread(){
@Override
public void run() {
while (!isInterrupted()) {
try {
Thread.sleep(1000);
runOnUiThread(new Runnable() {
@Override
public void run() {
Calendar c = Calendar.getInstance();
mHours = c.get(Calendar.HOUR_OF_DAY);
mMinutes = c.get(Calendar.MINUTE);
mSeconds = c.get(Calendar.SECOND);
String mTimeString = ""+mHours + mMinutes;
ImageView busBar = (ImageView) findViewById(R.id.bus_bar);
int intTimeString = Integer.valueOf(mTimeString);
switch(intTimeString)
{
case 1030:
case 1040:
case 1052:
case 1103:
case 1115:
case 1130:
case 1140:
case 1152:
case 1203:
busBar.setImageResource(R.drawable.bus_bar);
break;
case 1031:
case 1042:
case 1054:
case 1105:
case 1131:
case 1141:
case 1154:
case 1205:
busBar.setImageResource(R.drawable.bus_bar_02);
break;
case 1032:
case 1044:
case 1055:
case 1107:
case 1132:
case 1143:
case 1155:
case 1207:
busBar.setImageResource(R.drawable.bus_bar_03);
break;
case 1033:
case 1046:
case 1057:
case 1109:
case 1133:
case 1145:
case 1157:
case 1209:
busBar.setImageResource(R.drawable.bus_bar_04);
break;
case 1034:
case 1048:
case 1059:
case 1110:
case 1116:
case 1134:
case 1147:
case 1159:
case 1210:
busBar.setImageResource(R.drawable.bus_bar_05);
break;
case 1035:
case 1049:
case 1100:
case 1112:
case 1135:
case 1149:
case 1200:
case 1212:
busBar.setImageResource(R.drawable.bus_bar_06);
break;
case 1036:
case 1050:
case 1101:
case 1113:
case 1136:
case 1150:
case 1201:
case 1213:
busBar.setImageResource(R.drawable.bus_bar_07);
break;
case 1039:
case 1051:
case 1102:
case 1114:
case 1117:
case 1139:
case 1151:
case 1202:
case 1214:
busBar.setImageResource((R.drawable.bus_bar_08));
break;
}
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
t.start();
Photo of the bus_bar_8)
TimeTable of the bus
最佳答案
您可以尝试将一个案例的所有时间收集到一个数组或列表中,然后使用if/else检查每个案例。
在Java中使用“包含”有一些简单的选项(在这里检查:One liner to check if element is in the list)
例如:
List<Integer> case1List = Arrays.asList(new Integer[] {1030, 1040, 1052, 1103, 1115, 1130, 1140, 1152, 1203});
List<Integer> case2List ....
....
if (case1List.contains(intTimeString)) {
//do something
}
else if (case2List.contains(intTimeString) {
//do something
}
....
关于java - 如何使用循环遍历图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54784682/