Для игры в блэкджек, которую я делаю, мне нужна карта для перевода на позицию дилера из кучи, а затем в позицию игрока, поэтому я сделал для нее общий метод.Анимация андроидов в порядке
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.
Я не хочу ждать 1000 миллисов между вызовами animateCard() с использованием таймера или CountDownTimer. Что я хочу, чтобы это было что-то вроде этого:
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() вызывается, и удаление каждого из них после того, как они заканчивают анимации, я просто Должен спросить, правильно ли я делаю это, так как я попытался вызвать dealHand() примерно 50 раз, что вызвало 150 из ImageViews, я видел, что в профилировщике потребовалось около 1,5 МБ ОЗУ, этот 1.5Mb не убирался, даже когда я называется System.gc().