这个小例子主要用到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

更多相关文章

  1. Android的CheckBox控件的点击效果布局文件
  2. 利用第三方jar包jaudiotagger实现与MediaMetadataRetriever类似
  3. 在Android中实现文件读写
  4. Android里解析AndroidManifest.xml的java文件
  5. Android 利用getIdentifier()方法获取资源ID
  6. android 文件系统结构及其引导
  7. Android中彩信文件的读取
  8. Android 上传图片到服务器(多文件上传)
  9. Android 系统文件简介

随机推荐

  1. android 自定义Gallery
  2. android:taskAffinity属性的简单测试
  3. Android(安卓)camera调用出现错误解决方
  4. 【Android】通过耳机调起语音助手App配置
  5. Android(安卓)source 的网址 及 学习网址
  6. Android关于8.0以上Service服务相关问题
  7. Android(安卓)系统(84)---查看分区的大小
  8. Android判断下载File是否为apk文件
  9. Android复习(三)
  10. Android(安卓)Design Support Library