android studioでアプリを作っています。
ランダムに表示される画像(a.png~z.png)に合わせて、それぞれ対応した音声(a.wav~z.wav)を再生したいです。
<やりたい挙動>
(※画像はランダムな順番で表示されます。)
1、画像a.pngが表示される
2、ボタンを押す
3、音声a.wavが再生される。
↓(次の画像へ)
1、画像r.pngが表示される
2、ボタンを押す
3、音声r.wavが再生される。
↓(次の画像へ)
1、画像p.pngが表示される
2、ボタンを押す
3、音声p.wavが再生される。
というような挙動を作りたいです。
<試していること>
if (questionImage == a){
soundPlayer.playaSound();
}else if (questionImage.equals("b.png")){ soundPlayer.playbSound(); }
みたいな書き方でいけるのかな、、と思っているのですが、エラーが出ています。
if (questionImage == a)
の部分をどう書けばよいのか分かりません。
drawable/a.png
と書いてもおかしくなりますし・・。
素人的な間違いをしているのは分かっているのですが、3日間検索し続けても解決できません・・。
ドットインストールやyoutubeなどで検索しているのですが、同じような動作をするコードがないため、どのように画像を指定したらよいのか分かりません。
音はきちんと鳴っているので、画像のif処理のやり方を知りたいです。
とにかく、コードの書き方が分かりません・・。
ランダムに表示された画像がf.pngであったら、f.wavを再生する、というコードを書きたいです。
コード package com.test.java; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; import java.util.Random; //波かっこ1(メイン)開始 public class MainActivity extends AppCompatActivity { private TextView countLabel; private ImageView questionImage; //ImageViewは絵を入れるための額縁 //private TextView questionLabel; private Button answerBtn1; private Button answerBtn2; private Button answerBtn3; private Button answerBtn4; private String rightAnswer; //String文字型であることに注目したい private int rightAnswerCount = 0; //初期化=定義 private int quizCount = 1; //初期化=定義 static final private int QUIZ_COUNT = 50; //全部の出題数を入れるのだ!! ArrayList<ArrayList<String>> quizArray = new ArrayList<>(); //ああ・・・これもよく分からねえ //ArrayList<ArrayList<String>> って普通の書き方なの?あとnewもよくわからねえ //クイズデータ並べる String quizData[][] = { //[][]は多次元配列というらしい //{"画像名","正解",("選択2","選択3","選択4"}, //,←これ[,]が必要なんだ!!! {"one","1"}, //[0][0],[0][1],... {"two","2"}, //[1][0],[1][1], {"three","3"}, }; //クイズデータ並べた MySound mySound = new MySound(); // ① サウンド準備 //オーヴァーライド波かっこ(2)開始 @Override protected void onCreate(Bundle savedInstanceState) { //よく分からない定型文 super.onCreate(savedInstanceState); //よく分からない定型文2 setContentView(R.layout.activity_main); //xmlを表示 // ② 効果音の準備wavだけどmp3sで定義されている。クイズデータと同じ並びで並べる int[] mp3s = { R.raw.a, //[0] R.raw.b, //[1] R.raw.c, //[2] }; mySound.onCreate(this,mp3s); // ③ 初期化、言葉がまぎらわしいがただ定義(代入)しただけ countLabel = findViewById(R.id.countLabel); questionImage = findViewById(R.id.questionImage); answerBtn1 = findViewById(R.id.answerBtn1); answerBtn2 = findViewById(R.id.answerBtn2); answerBtn3 = findViewById(R.id.answerBtn3); answerBtn4 = findViewById(R.id.answerBtn4); //quizDataからクイズ出題用のquizArrayを作成する for (int i = 0; i < quizData.length; i++) { //lengthは配列の要素の数を返す、length()は文字列の文字数を返すんだって //多次元配列だけど、[0][0],[0][1],の最初の[0]だけ返すのかな?? //新しいArrayListを用意 ArrayList<String> tmpArray = new ArrayList<>(); //要素を格納するためのリスト箱 //クイズデータを追加 tmpArray.add(quizData[i][0]); //画像名 tmpArray.add(quizData[i][1]); //正解 //tmpArray.add(quizData[i][2]); //選択2 //tmpArray.add(quizData[i][3]); //選択3 //tmpArray.add(quizData[i][4]); //選択4 //tmpArrayの追加順番は、quizData多次元配列[0][0],[0][1],[0][2],[0][3],[0][4],[1][0],[1][1], //つまりtmpArrayは、ただの配列の[0],[1],[2]..になるのかな? //↑は多分違うようだ。tmpArrayも、多次元配列[0][0],[0][1],[0][2]のままなんだと思う。 //tmpArrayをquizArrayに追加する quizArray.add(tmpArray); //ここがよく分からん。どういうことなのか?配列に配列を追加とは //"one","1"は[0]で取り出せるらしい。quizArrayもまだ多次元配列[0][0],[0][1],[0][2]っぽい。 } //quizDataからクイズ出題用のquizArrayを作成した showNextQuiz(); //実行showNextQuiz //すぐ下に処理内容が書いてある } //オーヴァーライド波かっこ(2)とじ・・・とじていいのか?? // showNextQuiz波かっこ開始 public void showNextQuiz() { //クイズカウントラベルを更新 countLabel.setText("Q" + quizCount); //ランダムな数字を取得・・下の2行で1セット文章 Random rand = new Random(); int randomNum = rand.nextInt(quizArray.size()); //quizArray多次元配列の[0][0]の左の数字を指すと思う //0~quizArrayの数-1のどこかの数字を取り出す //音声で共通に取り出せない問題がある //randomNumを使ってquizArrayからクイズを一つ取り出す ArrayList<String> quiz = quizArray.get(randomNum); //なぜStringになるのか?? //おそらく、["one","1"]の文字配列を呼び出しているのだろう。 //randomNumを使ってquizArrayから音を取り出せるのでは //試しに音を鳴らしてみよう mySound.onPlay(randomNum); //おお。。ここに書く分には大丈夫そうです。第一問の時はなぜか鳴りませんけど・・ //画像をセットする questionImage.setImageResource( getResources().getIdentifier(quiz.get(0), "drawable", getPackageName()) ); //配列から画像名を取り出す時は quiz.get(0) //正解をrightAnswerにセット rightAnswer = quiz.get(1); //正解を取り出す時は quiz.get(1) //このクイズをquizArrayから削除<消したいけど消すと挙動がおかしくなる //quizArray.remove(randomNum); //消しても大丈夫そうなので消してみた。完全なるランダムになる } //ここに}があるから、randomNumが参照できねえ!!97行付近のshowNextQuiz // checkAnswer波かっこ開始 public void checkAnswer(View view){ //意味も分からん。他の書き方できないのかなあ・・・ //どのボタンが押されたか Button answerBtn = findViewById(view.getId()); //意味分からん //ボタンのテキストを取得 String btnText = answerBtn.getText().toString(); //ボタンテキストを取得 String alertTitle; //if elseの波かっこ群開始 if (btnText.equals(rightAnswer)) { alertTitle = "せいかい!!"; rightAnswerCount++; //mySound.onPlay(randomNum); // ④ 再生 //mySound.onPlay(1); // 0ならcが再生 //クイズ画像=cならsoundPlayer.playc();的な感じかと思う }else { alertTitle = "まちがっているよ"; } //if elseの波かっこ群終了 //ダイアログを作成 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(alertTitle); builder.setMessage("こたえは" + rightAnswer + "だよ"); builder.setPositiveButton("つぎへいく", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (quizCount == QUIZ_COUNT){ //結果画面へ移動 Intent intent = new Intent(getApplicationContext(), ResultActivity.class); intent.putExtra("RIGHT_ANSWER_COUNT", rightAnswerCount); startActivity(intent); }else { quizCount++; showNextQuiz(); //showNextQuiz実行する } //elseとじ } //160行付近のpublic void onClick(DialogInterface dialog, int which) とじ }); //"つぎへいく"のsetPositeveButton とじ builder.setCancelable(false); builder.show(); } // checkAnswer波かっことじ } //大きいMainとじ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="fill_parent" tools:context=".MainActivity" android:orientation="vertical" android:gravity="center_horizontal" android:background="@android:color/white"> <ImageView android:id="@+id/questionImage" android:layout_width="300dp" android:layout_height="200dp" android:src="@drawable/a"/> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:gravity="center_horizontal" > <Button android:id="@+id/answerBtn1" android:layout_width="60dp" android:layout_height="60dp" android:onClick="checkAnswer" android:text="c" /> </LinearLayout> </LinearLayout>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/21 19:26
2019/12/22 00:25
2019/12/22 14:59
2019/12/22 15:00
2019/12/22 15:05
2019/12/22 16:13