私が作っているブラックジャックのゲームでは、パイルからディーラーのポジションに、次にプレイヤーのポジションに変換するためにカードが必要なので、私は一般的な方法を作りました。アニメの順番をアニメ化する
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();
}
これは今書いているとおり、明らかに1つのカードのみを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()と呼ばれているの作成、およびそれらのそれぞれを削除しています見ることができるように、私はちょうど私がdealHand()を約50回呼び出してImageViewsを150回作成したので、私が正しく処理しているかどうか聞いてみると、プロファイラで約1.5MBのRAMが必要であることがわかりました。 System.gc()と呼ばれます。