博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 开发之电子钢琴 源码
阅读量:6618 次
发布时间:2019-06-25

本文共 1327 字,大约阅读时间需要 4 分钟。

这个小例子主要用到手势部分和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就不会被正常监听到呢。如果哪位同学知道原因的请帮忙解答下
源文件在这里

本文转自qianqianlianmeng博客园博客,原文链接:http://www.cnblogs.com/aimeng/archive/2011/11/17/2253123.html
,如需转载请自行联系原作者
你可能感兴趣的文章
guns-lite 新增内容管理模块 CMS
查看>>
详解C语言指针与常量的关系
查看>>
Sequelize 4.42.1 发布,基于 Nodejs 的异步 ORM 框架
查看>>
Android开发的七大环节
查看>>
国务院通过“十三五”国家信息化规划
查看>>
Maven单独构建多模块项目中的单个模块
查看>>
Spring Boot项目@RestController使用重定向redirect
查看>>
【量子万象】植物不可怕 就怕植物懂量子力学
查看>>
商城产品如何应对多个客户不同的需求修改并发布对应客户的文件
查看>>
html复选框的全选和全不选
查看>>
SecureCRT双击Tab快速复制Session
查看>>
Spring注入内部的Beans
查看>>
量子纠缠现象是什么
查看>>
Ubuntu 16.04下MySQL 5.7.18取消开机启动(解决无法使用Sysvinit(update-rc.d/sysv-rc-conf)脚本关闭)...
查看>>
阿里:千亿交易背后的0故障发布
查看>>
【深度森林第三弹】周志华等提出梯度提升决策树再胜DNN
查看>>
Splunk推出Splunk Insights for AWS Cloud Monitoring
查看>>
mysql 的 find_in_set函数使用方法
查看>>
vb实现查询sql
查看>>
落地蓉城 2017中国软件生态大会带来云商机
查看>>