androidstudioでゲーム作りをしています。
animatorで連続アニメーションさせ、その連続アニメーションが終わったら、ダイアログを表示させたいと思い、MainActivity.javaに、
animatorset_ouhuku.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) { }
@Override
public void onAnimationEnd(Animator animation) {
list_kaki_select.remove(0);
if(list_kaki_select.size()!=0){
kaki_getXY();
kaki_saru_keisan_animation();
}else{
DialogFragment dialog=new MyDialogFragment();
dialog.show(getSupportFragmentManager(),"dialog_button");
}
}
@Override
public void onAnimationCancel(Animator animation) { }
@Override
public void onAnimationRepeat(Animator animation) { }
});
}
}
というコードを書きましたが、ダイアログが表示されたらすぐ画面自体が消えてしまいます。
なので、 protected void onCreate(Bundle savedInstanceState) に直接
**DialogFragment dialog=new MyDialogFragment();
dialog.show(getSupportFragmentManager(),"dialog_button");**を書くと、ちゃんとダイアログが表示されます。
アニメーションが終了したらダイアログが表示されるようにするには、どうしたらいいでしょうか。
よろしくお願いします。
MainActivity.javaです。
java
1import androidx.appcompat.app.AppCompatActivity; 2import androidx.constraintlayout.widget.ConstraintLayout; 3import androidx.fragment.app.DialogFragment; 4import androidx.lifecycle.ViewModelProvider; 5 6import android.animation.Animator; 7import android.animation.AnimatorInflater; 8import android.animation.AnimatorSet; 9import android.animation.ObjectAnimator; 10import android.content.Intent; 11import android.media.Image; 12import android.os.Bundle; 13import android.os.Handler; 14import android.os.Looper; 15import android.util.DisplayMetrics; 16import android.view.View; 17import android.view.animation.Animation; 18import android.view.animation.AnimationUtils; 19import android.widget.ImageView; 20import android.widget.TextView; 21 22import java.util.ArrayList; 23import java.util.List; 24import java.util.Random; 25 26public class MainActivity extends AppCompatActivity implements Runnable { 27 ImageView saru1,saru2; 28 int count; 29 Thread thread; 30 static Animation anim1; 31 static int w,h;//画面サイズ取得 32 ImageView kaki[]=new ImageView[24];//柿全部24こ 33 int kakiImageId[]=new int[]{R.id.kaki0,R.id.kaki1, R.id.kaki2,R.id.kaki3, R.id.kaki4,R.id.kaki5, R.id.kaki6,R.id.kaki7, R.id.kaki8,R.id.kaki9, R.id.kaki10,R.id.kaki11, R.id.kaki12,R.id.kaki13, R.id.kaki14,R.id.kaki15, R.id.kaki16,R.id.kaki17, R.id.kaki18,R.id.kaki19, R.id.kaki20,R.id.kaki21, R.id.kaki22,R.id.kaki23};;//柿24このImageId 34 List<Integer> list_kaki24 = new ArrayList<>(); 35 List<Integer> list_kaki_select = new ArrayList<>(); 36 int kazu;//サルがとる柿の数 37 int px;//サル画像の左側のマージン 38 int kaki_num;//とる柿ナンバー(配列) 39 float x;//とる柿のX座標 40 float y;//とる柿のy座標 41 42 TextView ma_tv[]=new TextView[8];//TextView8こ 43 int ma_tvId[]=new int[]{R.id.ma_tv0,R.id.ma_tv1,R.id.ma_tv2,R.id.ma_tv3,R.id.ma_tv4,R.id.ma_tv5,R.id.ma_tv6,R.id.ma_tv7}; 44 String ma_tvText[]=new String[]{"わしといっしょに、","いやいや、きみがわしになって、","ぼうけんをしてくれるかのう?","むかし、","けがをしたさるをたすけたが、","そのご、どうなったのか、","きになっとる。",""}; 45 46 @Override 47 protected void onCreate(Bundle savedInstanceState) { 48 super.onCreate(savedInstanceState); 49 setContentView(R.layout.activity_main); 50 51 anim1 = AnimationUtils.loadAnimation(this, R.anim.anim1); 52 thread = new Thread(this); 53 count = 0; 54 saru1 = findViewById(R.id.saru1); 55 saru2 = findViewById(R.id.saru2); 56 for(int i=0;i<8;i++){ 57 ma_tv[i]=(TextView)this.findViewById(ma_tvId[i]); 58 ma_tv[i].setVisibility(View.INVISIBLE); 59 ma_tv[i].setText(ma_tvText[i]); 60 } 61 for(int i=0;i<24;i++){ 62 kaki[i]=(ImageView)this.findViewById(kakiImageId[i]); 63 list_kaki24.add(i); 64 } 65 kimeru_kaki();//どの柿をいくつとるか決めておく 66 px = convertDPtoPX(100);//サル画像の左側のマージンが100dpをpxに変換 67 } 68 public void onWindowFocusChanged(boolean hasFocus) { 69 super.onWindowFocusChanged(hasFocus); 70 View view = findViewById(R.id.ma_app_screen); 71 h = view.getHeight(); 72 w = view.getWidth(); 73 if (list_kaki_select.size() != 0) { 74 kaki_getXY(); 75 kaki_saru_keisan_animation(); 76 } 77 thread.start(); 78 } 79 public int convertPXtoDP(int px) { 80 DisplayMetrics metrics = this.getResources().getDisplayMetrics(); 81 int dp = (int)(px / metrics.density); 82 return dp; 83 } 84 public int convertDPtoPX(int dp) { 85 DisplayMetrics metrics = this.getResources().getDisplayMetrics(); 86 int px = (int)(dp*metrics.density); 87 return px; 88 } 89 public void start(){ 90 if(thread==null){ 91 thread=new Thread(this); 92 thread.start(); 93 } 94 } 95 public void stop(){ 96 if(thread!=null){thread=null;} 97 } 98 public void run() { 99 Thread thisThread=Thread.currentThread(); 100 final Handler mainHandler = new Handler(Looper.getMainLooper()); 101 while (thread!=null){ 102 count++; 103 mainHandler.post(() -> { 104 ma_tv[7].setVisibility(View.VISIBLE); 105 ma_tv[7].setText("list_kaki_select="+list_kaki_select+" : count=" + String.valueOf(count)); 106 if(count>=6&&count%3==0&&count<27){ 107 ma_tv[(count/3)-2].setVisibility(View.VISIBLE); 108 ma_tv[(count/3)-2].startAnimation(anim1); 109 } 110 }); 111 try { 112 thread.sleep(1000); 113 } catch (InterruptedException e) { 114 } 115 } 116 } 117 private void kimeru_kaki(){ 118 Random rand = new Random(); 119 kazu = rand.nextInt(4) + 4;//5~8の数が持ち去る柿の数 120 Random rand2 = new Random(); 121 for (int i = 0; i < kazu; i++) {//全柿の数24の中からどの柿を持ち去るか決める 122 int num = rand2.nextInt(list_kaki24.size()); 123 list_kaki_select.add(list_kaki24.get(num)); 124 list_kaki24.remove(num); 125 } 126 } 127 private void kaki_getXY(){ 128 kaki_num=list_kaki_select.get(0);//最初の要素を取り出す 129 x = kaki[kaki_num].getX(); 130 y = kaki[kaki_num].getY(); 131 } 132 private void kaki_saru_keisan_animation() { 133 Random rand=new Random(); 134 int r=rand.nextInt(3000)+2000; 135 float from_x=0; 136 float to_x=0; 137 float from_xx=0; 138 float to_xx=0; 139 int jikan=0; 140 saru1.setY(y - 48);//48は位置調整 141 saru2.setY(y - 48); 142 if(kaki_num<12){ //上の段の柿 143 jikan = (int) (r *(w-x) / (w + px-20));//移動時間の計算//pxはサル画像のマージン分 144 from_x=w+px; 145 to_x=x+px-15; 146 from_xx=x + px - 15; 147 to_xx=w+px; 148 }else{ //下の段の柿 149 jikan = (int)( r * x / (w + px-20));//移動時間の計算 150 from_x=-px; 151 to_x=x + px - 15; 152 from_xx=x + px - 15; 153 to_xx=-px; 154 } 155 ObjectAnimator animator_yoko_idou = ObjectAnimator.ofFloat(saru1, "translationX", from_x,to_x).setDuration(jikan);//15は位置調整 156 ObjectAnimator animator_idou_modoru1 = ObjectAnimator.ofFloat(saru1, "translationX", from_xx, to_xx).setDuration(jikan); 157 ObjectAnimator animator_idou_modoru2 = ObjectAnimator.ofFloat(saru2, "translationX", from_xx, to_xx).setDuration(jikan); 158 ObjectAnimator animator_toumei = ObjectAnimator.ofFloat(kaki[kaki_num], "alpha", 0f, 0f).setDuration(jikan); 159 Random rand2 = new Random(); 160 int start_ofset = rand2.nextInt(4000);//スタートオフセットの時間 161 animator_toumei.setStartDelay(start_ofset + jikan); 162 AnimatorSet animatorset_idou_modoru12 = new AnimatorSet(); 163 animatorset_idou_modoru12.playTogether(animator_idou_modoru1, animator_idou_modoru2); 164 AnimatorSet animatorset_ouhuku = new AnimatorSet(); 165 animatorset_ouhuku.playSequentially(animator_yoko_idou, animatorset_idou_modoru12); 166 animatorset_ouhuku.setStartDelay(start_ofset); 167 animator_toumei.start(); 168 animatorset_ouhuku.start(); 169 animatorset_ouhuku.addListener(new Animator.AnimatorListener() { 170 @Override 171 public void onAnimationStart(Animator animation) { 172 173 } 174 @Override 175 public void onAnimationEnd(Animator animation) { 176 list_kaki_select.remove(0); 177 178 if(list_kaki_select.size()!=0){ 179 kaki_getXY(); 180 kaki_saru_keisan_animation(); 181 }else{ 182 DialogFragment dialog=new MyDialogFragment(); 183 dialog.show(getSupportFragmentManager(),"dialog_button"); 184 } 185 } 186 @Override 187 public void onAnimationCancel(Animator animation) { } 188 @Override 189 public void onAnimationRepeat(Animator animation) { } 190 }); 191 } 192}
あなたの回答
tips
プレビュー