我目前正在尝试在Android中构建一个骰子滚动应用。
我设法轻松地构建了我的基本布局和方法但我目前仍然遇到以下问题:
我的屏幕上有两个ImageView
,我需要让它们同时更改3次,这是骰子滚动的基本模拟,然后才会向用户呈现最终的骰子面。
到目前为止,我试过这种方式:
public void rollDiceAnim() {
////// diceone anim
final android.os.Handler handler = new android.os.Handler();
Runnable runnable = new Runnable() {
int counter = 0;
@Override
public void run() {
if (counter<4) {
counter++;
Log.e("Counter value",counter+"!");
int diceOneAnim = (int) ((Math.random() * 6) + 1);
ImageView dice1_img = (ImageView) findViewById(R.id.dice1_img);
switch (diceOneAnim) {
case 1:
dice1_img.setImageResource(R.drawable.d1);
break;
case 2:
dice1_img.setImageResource(R.drawable.d2);
break;
case 3:
dice1_img.setImageResource(R.drawable.d3);
break;
case 4:
dice1_img.setImageResource(R.drawable.d4);
break;
case 5:
dice1_img.setImageResource(R.drawable.d5);
break;
case 6:
dice1_img.setImageResource(R.drawable.d6);
break;
}
handler.postDelayed(this, 150);
} else {
rollDice();
}
}
};
/////////
///// dice two anim
final android.os.Handler handler2 = new android.os.Handler();
Runnable runnable2 = new Runnable() {
int counter2 = 0;
@Override
public void run() {
if (counter2<4) {
counter2++;
Log.e("Counter value",counter2+"!");
int diceTwoAnim = (int) ((Math.random() * 6) + 1);
ImageView dice2_img = (ImageView) findViewById(R.id.dice2_img);
switch (diceTwoAnim) {
case 1:
dice2_img.setImageResource(R.drawable.d1);
break;
case 2:
dice2_img.setImageResource(R.drawable.d2);
break;
case 3:
dice2_img.setImageResource(R.drawable.d3);
break;
case 4:
dice2_img.setImageResource(R.drawable.d4);
break;
case 5:
dice2_img.setImageResource(R.drawable.d5);
break;
case 6:
dice2_img.setImageResource(R.drawable.d6);
break;
}
handler2.postDelayed(this, 500);
} else {
rollDice();
}
}
};
////////////////////////
handler.postDelayed(runnable, 100);
handler2.postDelayed(runnable2, 100);
}
我制作了两个可运行的对象,每个对象随机迭代,在呈现最后一个之前更改一组骰子面。
问题在于运行两个:
handler.postDelayed(runnable, 100);
handler2.postDelayed(runnable2, 100);
它们不会同时运行。第一个处理程序完成后,第二个处理程序仍有一些工作要做。
我尝试使用线程代替处理程序,但我的应用程序崩溃了。
答案 0 :(得分:0)
我认为您可以尝试将这两个作业合并为一个Runnable
。
答案 1 :(得分:0)
我强烈建议您查看有关AsyncTask的Android API。这是处理异步请求的更好方法,特别是如果您有多个。