zoukankan      html  css  js  c++  java
  • 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部分目前还有个问题没有解决:
    每次按下键盘时我都要调用相应的音符
    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 

  • 相关阅读:
    AxWindowsMediaPlayer的详细用法
    C# 播放器控件的常用方法
    在 C# 中使用文件名启动应用程序
    备份和恢复Android手机的NAND分区
    刷Recovery的方法
    WPF RadioButton的探究,为啥选中一个其他都自动不选中了呢?
    WPF大牛Josh Smith 转投 iOS 的怀抱
    终端服务的剪贴板的缺陷,导致WPF调用Clipboard.SetText() 失败
    用df命令查看分区情况
    WPF与输入法冲突研究之二:TextInput事件的BUG?
  • 原文地址:https://www.cnblogs.com/aimeng/p/2253123.html
Copyright © 2011-2022 走看看