コード ```### 前提・実現したいこと androidstudioでゲームを作成しています。 選択肢が正解していたら横移動し、不正解だと別画面に移動するというようなプログラムを書きたいと考えています。 また、アニメーションの動きとして、xに400→前回の座標を取得+400で横移動をしようとしているのですが、他にも方法があれば教えていただきたいです。 ### 発生している問題・エラーメッセージ エラーは特に出ていないのですが、エミュレータで動かそうとするとアプリが落ちてしまいます。 ### 該当のソースコード ```Java package test.com.game; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Spinner; import android.widget.Button; import android.widget.ImageView; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.animation.PropertyValuesHolder; import android.animation.Animator; import android.animation.ObjectAnimator; public abstract class PleyActivity extends AppCompatActivity implements Animator.AnimatorListener{ TypedArray typedArray; Drawable drawable; ImageView blankImage; int i = 0; public void anime() { typedArray = getResources().obtainTypedArray(R.array.anime); blankImage = findViewById(R.id.blankImage); drawable = typedArray.getDrawable(i); blankImage.setImageDrawable(drawable); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.pley); Button button = findViewById(R.id.button); i = 0; anime(); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { setAnimetion(); // レイアウトからSpinnerを取得 Spinner item; item = findViewById(R.id.spinner); // 選択したアイテムを取得 String selected1 = (String) item.getSelectedItem(); String str1 = "選択肢1"; String str2 = "選択肢2"; String str3 = "選択肢3"; if (str1.equals(selected1)) { setAnimetion(); } else { Intent intent = new Intent(PleyActivity.this, OverActivity.class); startActivity(intent); System.exit(0); } item = findViewById(R.id.spinner2); String selected2 = (String) item.getSelectedItem(); if (str2.equals(selected2)) { setAnimetion(); } else { Intent intent = new Intent(PleyActivity.this, OverActivity.class); startActivity(intent); System.exit(0); } item = findViewById(R.id.spinner3); String selected3 = (String) item.getSelectedItem(); if (str3.equals(selected3)) { setAnimetion(); /*Intent intent = new Intent(PleyActivity.this, GoolActivity.class); startActivity(intent);*/ } else { Intent intent = new Intent(PleyActivity.this, OverActivity.class); startActivity(intent); } } }); } private void setAnimetion () { ImageView po = findViewById(R.id.blankImage); int[] location = new int[2]; po.getLocationInWindow(location); po.getWidth();//Viewの幅取得 int yoko = location[0]; // X座標 // PropertyValuesHolderを使ってX軸方向移動範囲のpropertyを保持 PropertyValuesHolder vhX = PropertyValuesHolder.ofFloat( "translationX", yoko + 400.0f); // ObjectAnimatorにセットする ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder( blankImage, vhX); // 再生時間を設定 3000msec=3sec objectAnimator.setDuration(3000); objectAnimator.addListener(this); // アニメーションを開始する objectAnimator.start(); } @Override public void onAnimationStart(Animator animation) { Log.d("debug","onAnimationStart()"); } @Override public void onAnimationEnd(Animator animation) { Log.d("debug","onAnimationEnd()"); } @Override public void onAnimationCancel(Animator animation) { Log.d("debug","onAnimationCancel()"); } @Override public void onAnimationRepeat(Animator animation) { Log.d("debug","onAnimationRepeat()"); } }
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
言語 Java Android Studio 4.1.1
初心者なうえ独学で勉強し始めたばかりのため、かなりあべこべな内容になっていると思います。
その他必要な情報等あれば教えていただけると幸いです。
アニメーションの動きを見るため一部コメントアウトしている場所があります
とりあえずソースコードはMarkDownのcode機能で提示しましょう。
このままだとインデントが消えていて読みづらくなります。
MarkDownについてはこの質問を参考に質問を編集してみてください。
https://teratail.com/questions/238564
アドバイスありがとうございます!編集し直しました。
タイトルの示す範囲が広すぎるので調整されたほうが良いかと。質問タグの単語並べてるだけなので内容がありません。
アドバイスありがとうございます!
確かにアバウトでしたね、修正させていただきました。
レイアウトの pley.xml はどのような感じなのでしょう。
回答2件
あなたの回答
tips
プレビュー