Java 动画结束,但视觉显示不结束';我没有出现
我正在用Android开发一款纸牌游戏,四名玩家轮流发牌。一轮是四张牌,然后我会检查谁赢了这一轮,这一轮的获胜者将开始下一轮 我现在面临的问题是,我看不到第四页在中间。一旦最后发牌的玩家的动画结束,它将调用该方法检查赢家并与赢家玩家开始下一轮,因此每次最后一页开始动画都会转到中间并消失而不稳定,并调用下一轮 这是我的密码 在onclick方法中,用户将选择一张卡并通过按播放按钮、左、右或顶部按钮进行处理,runanime和play1都会启动特定卡的动画Java 动画结束,但视觉显示不结束';我没有出现,java,android,animation,Java,Android,Animation,我正在用Android开发一款纸牌游戏,四名玩家轮流发牌。一轮是四张牌,然后我会检查谁赢了这一轮,这一轮的获胜者将开始下一轮 我现在面临的问题是,我看不到第四页在中间。一旦最后发牌的玩家的动画结束,它将调用该方法检查赢家并与赢家玩家开始下一轮,因此每次最后一页开始动画都会转到中间并消失而不稳定,并调用下一轮 这是我的密码 在onclick方法中,用户将选择一张卡并通过按播放按钮、左、右或顶部按钮进行处理,runanime和play1都会启动特定卡的动画 public void onClick(V
public void onClick(View v) {
Second sec = new Second();
third_turn three = new third_turn();
SharedPreferences pref = PreferenceManager
.getDefaultSharedPreferences(this);
String StartingPoint = "";
try {
StartingPoint = pref.getString("Start from", "");
} catch (Exception ex) {
Log.e(TAG, "exception on catch" + ex);
}
switch (v.getId()) {
case R.id.btn_sort_1:
String[] sorted = sort(arrPlayer1);
setup(sorted);
break;
case 0:
Bitmap bitmap = ((BitmapDrawable) imgViewArr[0].getDrawable())
.getBitmap();
SharedPreferences.Editor editor = PreferenceManager
.getDefaultSharedPreferences(this).edit();
editor.putString("SharedImage", encodetobase64(bitmap));
editor.putInt("cardno", 0);
editor.commit();
break;
case 1:
Bitmap bitmap2 = ((BitmapDrawable) imgViewArr[1].getDrawable())
.getBitmap();
SharedPreferences.Editor editor2 = PreferenceManager
.getDefaultSharedPreferences(this).edit();
editor2.putString("SharedImage", encodetobase64(bitmap2));
editor2.putInt("cardno", 1);
editor2.commit();
break;
case R.id.btn_play:
SharedPreferences pref1 = PreferenceManager
.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor_pl = PreferenceManager
.getDefaultSharedPreferences(this).edit();
int cardno = pref1.getInt("cardno", 0);
if (!mp.isPlaying()) {
mp.start();
}
play1(cardno);
if (StartingPoint.equals("")) {
editor_pl.putInt("toset", 0);
temp[0] = arrPlayer1[cardno];
}
if (StartingPoint.equals("start from left")) {
editor_pl.putInt("toset", 3);
temp[3] = arrPlayer1[cardno];
}
if (StartingPoint.equals("start from top")) {
editor_pl.putInt("toset", 2);
temp[2] = arrPlayer1[cardno];
}
if (StartingPoint.equals("start from right")) {
editor_pl.putInt("toset", 1);
temp[1] = arrPlayer1[cardno];
}
editor_pl.commit();
if (arrPlayer1.length > 1) {
arrPlayer1 = update(arrPlayer1, cardno);
play.setEnabled(false);
setup(arrPlayer1);
}
Bottom.setFocusable(false);
break;
case R.id.card_left:
if (StartingPoint.equals("")) {
temp[1] = Second.bot1(arrPlayer2, temp[0], sir);
runanime(temp[1], left, 1);
arrPlayer2 = play(arrPlayer2, temp[1]);
} else if (StartingPoint.equals("start from top")) {
temp[3] = third_turn.bot3(arrPlayer2, temp[0], temp[1],
temp[2], sir);
runanime(temp[3], left, 3);
arrPlayer2 = play(arrPlayer2, temp[3]);
} else if (StartingPoint.equals("start from right")) {
temp[2] = third_turn.bot2(arrPlayer2, temp[0], temp[1], sir);
runanime(temp[2], left, 2);
arrPlayer2 = play(arrPlayer2, temp[2]);
}
left.setFocusable(false);
break;
case R.id.card_top:
if (StartingPoint.equals("")) {
temp[2] = third_turn.bot2(arrPlayer3, temp[0], temp[1], sir);
runanime(temp[2], top, 2);
arrPlayer3 = play(arrPlayer3, temp[2]);
} else if (StartingPoint.equals("start from left")) {
temp[1] = Second.bot1(arrPlayer3, temp[0], sir);
runanime(temp[1], top, 1);
arrPlayer3 = play(arrPlayer3, temp[1]);
} else if (StartingPoint.equals("start from right")) {
temp[3] = third_turn.bot3(arrPlayer3, temp[0], temp[1],
temp[2], sir);
runanime(temp[3], top, 3);
arrPlayer3 = play(arrPlayer3, temp[3]);
}
top.setFocusable(false);
break;
case R.id.card_right:
if (StartingPoint.equals("")) {
temp[3] = third_turn.bot3(arrPlayer4, temp[0], temp[1],
temp[2], sir);
runanime(temp[3], right, 3);
arrPlayer4 = play(arrPlayer4, temp[3]);
} else if (StartingPoint.equals("start from left")) {
temp[2] = third_turn.bot2(arrPlayer4, temp[0], temp[1], sir);
runanime(temp[2], right, 2);
arrPlayer4 = play(arrPlayer4, temp[2]);
} else if (StartingPoint.equals("start from top")) {
temp[1] = Second.bot1(arrPlayer4, temp[0], sir);
runanime(temp[1], right, 1);
arrPlayer4 = play(arrPlayer4, temp[1]);
}
right.setFocusable(false);
break;
}
}
runanime方法:根据字符串,我将知道我必须使用哪张卡制作动画。最后一个参数是知道在中间的位置设置卡
private void runanime(String card, ImageView from, int to) {
Bitmap bmp = ((BitmapDrawable) from.getDrawable()).getBitmap();
SharedPreferences.Editor editor = PreferenceManager
.getDefaultSharedPreferences(this).edit();
editor.putString("SharedImage", encodetobase64(bmp));
editor.putInt("toset", to);
editor.commit();
ViewParent view = from.getParent();
sp.play(soundIds[0], 1, 1, 1, 0, 1);
((View) view).startAnimation(animMove);
}
private void runanime(String card, ImageView from, int to) {
Bitmap bmp = ((BitmapDrawable) from.getDrawable()).getBitmap();
SharedPreferences.Editor editor = PreferenceManager
.getDefaultSharedPreferences(this).edit();
editor.putString("SharedImage", encodetobase64(bmp));
editor.putInt("toset", to);
editor.commit();
ViewParent view = from.getParent();
sp.play(soundIds[0], 1, 1, 1, 0, 1);
((View) view).startAnimation(animMove);
}
现在在OnAnimationEnd方法中,我检索我在共享首选项中设置的那些值,并将这些图像设置在中间,然后将它们作为字符串存储在临时数组中,以了解获胜者
public void onAnimationEnd(Animation arg0) {
SharedPreferences pref = PreferenceManager
.getDefaultSharedPreferences(this);
Bitmap bmp = decodetobase64(pref.getString("SharedImage", ""));
Drawable image = new BitmapDrawable(getResources(), bmp);
int toset = pref.getInt("toset", 0);
//String StartingPoint = pref.getString("Start from", "");
switch (toset) {
case 0:
mid_1.setImageDrawable(image);
flag1 = true;
top.setFocusable(true);
top.performClick();
break;
case 1:
mid_2.setImageDrawable(image);
flag2 = true;
right.setFocusable(true);
right.performClick();
break;
case 2:
mid_3.setImageDrawable(image);
flag3 = true;
Bottom.setFocusable(true);
play.setEnabled(true);
break;
case 3:
mid_4.setImageDrawable(image);
flag4 = true;
break;
}
if (flag1 && flag2 && flag3 && flag4) {
NextPlayer(temp);
}
}
在这里设置了mid_4之后,flag4设置为true,if循环开始执行,但从视觉上看,我看不到第四张卡稳定下来。我甚至尝试过使用thread.sleep方法,但它并没有派上用场。谁能告诉我该怎么办
在OnAnimationEnd中,似乎在将图像设置为mid_4之前,方法flag4变为true。animMove是动画xml文件的初始值设定项