androidが開発した電子ピアノソース


この小さな例は主にandroidジェスチャー部分とMediaplayer部分の知識を用いている.ジェスチャー部分は問題ありませんが、現在のジェスチャーの状態(押したり放したり)は、MotionEventで定義されているEvent Codeで判断できます
  imageButton_white1.setOnTouchListener(new View.OnTouchListener() {
  public boolean onTouch(View view, MotionEvent motionEvent) {
  if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
  play(R.raw.white1);//               
  imageButton_white1.setImageResource(R.drawable.whiteback1);
  }
  if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
  imageButton_white1.setImageResource(R.drawable.white1);
  }
  return false;
  }
  });
Mediaplayerセクションには、キーボードを押すたびに対応する音符mediaPlayer 01=MediaPlayerを呼び出すという問題があります.create(Piano.this, resource); キー数の増加に伴うcreateの回数も増加する.createの回数が32回になってからキーボードを押すと鳴らなくなり、この時は画面の方向を変えるだけでプログラムを実行し続けることができます.私の理解はcreate後の資源が解放されていないことです.コードにも加わった
  mediaPlayer01.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
  public void onCompletion(MediaPlayer arg0) {
  mediaPlayer01.release();
  Toast.makeText(Piano.this, "     !", Toast.LENGTH_SHORT).show();
  }
  });

このような傍受コード.リソースファイルの再生が完了したら解放します.しかし、実行中にこの部分は機能しません(Toast部分は実行されていないため).
何が原因なのかまだ分からない.
PS:今日解決方法を見つけた
メディアプレーヤーのリスニングイベントを使用してメディアプレーヤーリソースを解放しません.直接プレイするときにreleaseを1回releaseし、それからcreateリソースファイルを作成します.
しかし、このやり方は少し合理的ではありません.
なぜリソースファイルはイベントがトリガーされたときにcreateが正常に傍受されないのでしょうか.もしどの学友が原因のを知っているならば
ソースファイルはこちら
転載:http://www.adobex.com/android/source/details/00000314.htm