屏幕上有四个球红色,蓝色,绿色,黄色,有两种状态 ON,OFF 。最初所有这些都处于 OFF 状态。我的要求是我有一个字符串假设 “RBYGRBYG” ,并且对于我想要更改的每个字母相应球的状态逐一 (R->RED,B->BLUE,Y->YELLOW,G->GREEN)
持续0.5秒。但我的playString("RBYGRBYG");
代码同时改变了所有球的状态0.5秒,而不是一个一个地改变它。
private void playString(String str) {
for(int i=0;i<str.length();i++)
{
if(str.charAt(i)=='R')
{
red.setImageResource(R.drawable.red_on);
new CountDownTimer(500,100){
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
red.setImageResource(R.drawable.red_off);
}
}.start();
}
if(str.charAt(i)=='B')
{
blue.setImageResource(R.drawable.blue_on);
new CountDownTimer(500,100){
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
blue.setImageResource(R.drawable.blue_off);
}
}.start();
}
if(str.charAt(i)=='G')
{
green.setImageResource(R.drawable.green_on);
new CountDownTimer(500,100){
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
green.setImageResource(R.drawable.green_off);
}
}.start();
}
if(str.charAt(i)=='Y')
{
yellow.setImageResource(R.drawable.yellow_on);
new CountDownTimer(500,100){
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
yellow.setImageResource(R.drawable.yellow_off);
}
}.start();
}
}
}
答案 0 :(得分:1)
试试这个:
private int i= 0; // class field
private void playString(String str) {
i++;
if (i == str.length())
i = 0;
if(str.charAt(i)=='R')
// the rest of the code the same removing one "}" at the end
答案 1 :(得分:1)
让我们看看我是否做对了: - 对于你的字符串上的每个字母,你想要改变球的状态(与字符串中的字符相对应)。
也许尝试一段时间而不是for,并且你只会在函数onFinish()中增加i ++,这样只有在前一个颜色已经停止的情况下才能获得下一个颜色。
编辑希望这会有所帮助:
private void playString(String str){
while (i < str.length()){
if(str.charAt(i)=='R'){
red.setImageResource(R.drawable.red_on);
new CountDownTimer(500,100){
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
red.setImageResource(R.drawable.red_off);
i+=1;
}
}.start();
}
}
}