###前提・実現したいこと
android studio で音楽再生のアプリを作っていたのですが値の受け渡しがうまくできなくて困っております。
画像をタッチすることで変数の値を変更させて、switch文で文字列を変更することで、再生するファイルを変えようと思ったのですが、その変更がうまくいっていません。
###発生している問題・エラーメッセージ
MainActivityでnumの値がうまく受け取れない
###該当のソースコード
MyView2.java
package com.example.******.myapplication_teishutu; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; public class MyView2 extends View { private float x=0,y=0; private Rect rect = new Rect(10,10,30,30) ; //衝突判定のターゲットを表す四角形 private Rect rect2 = new Rect(50,10,70,30) ; //衝突判定のターゲットを表す四角形 private Rect rect3 = new Rect(90,10,110,30) ; //衝突判定のターゲットを表す四角形 private Common common = new Common(); private Bitmap image; //画像を読み込むためにBitmap クラスのオブジェクトを定義 public MyView2(Context context) { super(context); } public MyView2(Context context, AttributeSet attrs) { super(context, attrs); Resources resource=getContext().getResources(); image = BitmapFactory.decodeResource(resource,R.drawable.mugic); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint p= new Paint(); canvas.drawRect(rect,p); canvas.drawBitmap(image,10,10,p); canvas.drawRect(rect2,p); canvas.drawBitmap(image,50,10,p); canvas.drawRect(rect3,p); canvas.drawBitmap(image,90,10,p); } public boolean onTouchEvent(MotionEvent event){ super.onTouchEvent(event); x = event.getX(); //タッチしたX座標を得る。 y = event.getY(); //タッチしたY座標を得る。 if (rect.contains((int) x, (int) y)) { common.setNum(1); Log.v("dbg", String.valueOf( common.getNum() )); } else if (rect2.contains((int) x, (int) y)) { common.setNum(2); Log.v("dbg", String.valueOf( common.getNum() )); } if (rect3.contains((int) x, (int) y)) { common.setNum(3); Log.v("dbg", String.valueOf( common.getNum() )); } return false; } }
MainActivity.java
package com.example.*****.myapplication_teishutu; import android.content.res.AssetFileDescriptor; import android.media.AudioManager; import android.media.MediaPlayer; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.io.IOException; public class MainActivity extends AppCompatActivity { private Button b, b2; private MediaPlayer mediaPlayer; TextView TextView; String string; private Common common; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); common = (Common) this.getApplication(); common.init(); TextView=(TextView) this.findViewById(R.id.textView); b = (Button) this.findViewById(R.id.button); //id が button であるボタン[Button]のオブジェクト b が生成される。 b2 = (Button) this.findViewById(R.id.button2); //id が button であるボタン[Button]のオブジェクト b が生成される。 } public void onClick() { setString(common.getNum()); TextView.setText(String.valueOf(common.getNum())); try { mediaPlayer = new MediaPlayer();;//音を読み込むためにMediaPlayer クラスのオブジェクトを定義 // assetsから mp3 ファイルを読み込み AssetFileDescriptor afdescripter = getAssets().openFd(string); //MediaPlayerに読み込んだ音楽ファイルを指定 mediaPlayer.setDataSource(afdescripter.getFileDescriptor(), afdescripter.getStartOffset(), afdescripter.getLength()); // 音量調整を端末のボタンに任せる setVolumeControlStream(AudioManager.STREAM_MUSIC); mediaPlayer.prepare(); // 再生する mediaPlayer.start(); } catch (IllegalStateException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } public void onClick2(View view) { try { mediaPlayer.stop(); }catch (IllegalStateException e){ e.printStackTrace(); } } public void setString( int i){ switch(i%4){ case 0: string = "c7.mp3"; Log.v("set",string.valueOf(common.getNum())); break; case 1: string = "n46.mp3"; Log.v("set",string.valueOf(common.getNum())); break; case 2: string = "n72.mp3"; Log.v("set",string.valueOf(common.getNum())); break; case 3: string = "n77.mp3"; Log.v("set",string.valueOf(common.getNum())); break; } } }
Common.java
package com.example.********.myapplication_teishutu; import android.app.Application; public class Common extends Application { private int num=0; public void setNum( int i){ this.num = i; } public int getNum(){ return num; } public void init(){ num=0; } }
###試したこと
値が変更された後にもう一度
common = (Common) this.getApplication();
を使わないといけないのかと思い、onClickの中で
common = (Common) this.getApplication();
を呼ばないといけないのかと思ってやってみたのですが、エラーになってアプリが閉じてしまいます
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/07 12:56
退会済みユーザー
2017/01/07 13:02
2017/01/07 13:05
2017/01/07 13:07
退会済みユーザー
2017/01/07 13:25
2017/01/07 13:51
退会済みユーザー
2017/01/07 15:14
2017/01/08 05:47