내가 만들고있는 블랙 잭 게임의 경우 더미에서 딜러 위치로, 그 다음 플레이어 위치로 변환 할 카드가 필요하므로 일반적인 방법을 만들었습니다.순서대로 안드로이드 뷰 애니메이션하기
private void dealHand() {
animateCard(dealer_iv_1);
animateCard(dealer_iv_2);
animateCard(player_iv_1);
animateCard(player_iv_2);
}
private void animateCard(View v) {
animated_card_iv.animate().x(v.getX()).y(v.getY()).setDuration(1000).withEndAction(new Runnable() {
@Override
public void run() {
animated_card_iv.setX(pile_iv.getX());
animated_card_iv.setY(pile_iv.getY());
}
}).start();
}
지금 작성되었으므로 분명히 player_iv_2에 카드 하나만 애니메이션으로 적용됩니다.
Timer 또는 CountDownTimer를 사용하여 animateCard() 호출간에 1000 밀리를 기다리고 싶지 않습니다. 가이 같은 일을 위해 내가 원하는 것 것은 :
private void dealHand() {
animateCard(dealer_iv_1).wait();
animateCard(dealer_iv_2).wait();
animateCard(player_iv_1).wait();
animateCard(player_iv_2);
}
그래서 animateCard은() 타입을 반환하고이 끝나면 알려해야합니다. 이것이 어떻게 가능한지?
는 지금까지 내가 무엇을 가지고 있습니다 :
private void dealHand() {
animateCard(dealer_iv_1, 0);
animateCard(player_iv_1, 1010);
animateCard(player_iv_2, 2010);
}
private void animateCard(View v, long startDelay) {
final ImageView iv = new ImageView(this);
iv.setLayoutParams(new ViewGroup.LayoutParams(104, 149));
iv.setImageResource(R.drawable.back0);
iv.setX(pile_iv.getX());
iv.setY(pile_iv.getY());
((RelativeLayout)findViewById(R.id.pile_layout)).addView(iv);
iv.animate().x(v.getX()).y(v.getY()).setDuration(1000).setStartDelay(startDelay).withEndAction(new Runnable() {
@Override
public void run() {
((RelativeLayout)findViewById(R.id.pile_layout)).removeView(iv);
}
}).start();
}
당신은 내가 지금은 애니메이션 완료 후 3 ImageViews마다 dealHand()가 호출을 생성하고 그들 각각을 제거하고 있습니다 볼 수 있듯이, 나는 단지 내가 150 번 ImageView를 생성 한 약 50 배에 해당하는 dealHand()를 호출 해 보았 기 때문에 내가 제대로하고 있는지 물어보아야한다. 프로파일 러에서 약 1.5MB의 RAM이 필요하다는 것을 알았다.이 1.5MB는 정리하지 못했다. System.gc()를 호출합니다.