android 開發之電子鋼琴 源碼

來源:互聯網
上載者:User

這個小例子主要用到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部分目前還有個問題沒有解決:
每次按下鍵盤時我都要調用相應的音符
mediaPlayer01 = 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: 今天找到一個解決方案
不使用mediaplayer的監聽事件來釋放mediaplayer資源了。直接在play的時候先release一次,然後create資源檔。
不過這種做法稍微有點不大合理
為什麼資源檔在事件觸發的時候才create就不會被正常監聽到呢。如果哪位同學知道原因的請幫忙解答下

源檔案在這裡
 MyPiano.rar 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.