1、基类抽取—(abstract)BaseActivity
2、单例模式—SoundPoolUtil、
3、SoundPool类Api运用

一、SoundPool:
1、构造函数:SoundPool (int maxStreams, int streamType, int srcQuality)
参数:

maxStreams streamType srcQuality
最大的流的数量 流的类型建议AudioManager.STREAM_SYSTEM 频的质量,默认是0,目前没有影响

2、加载音频:load(Context context, int resId, int priority) 
参数:

context resId priority
上下文对象(不bb) 资源id(用来指定音频文件位置) 优先级:都是短促音频无影响设置为1即可

3、播放音频:play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
参数解释:

soundID leftVolume rightVolume priority loop rate
音频的序号(load到SoundPool的顺序,从1开始) 左声道的音量控制, 0.0 到 1.0 优先级,0是最低优先级 优先级,0是最低优先级 是否循环播放,0为不循环,-1为循环 播放比率,从0.5到2,一般为1,表示正常播放

4、我们可以用单例模式来初始化SoundPool类:具体代码如下:

package zz.btmusicdemo.util;import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
import android.util.Log;import zz.btmusicdemo.R;/*** Created by abc on 2019/10/16.*/public class SoundPoolUtil {private static SoundPoolUtil soundPoolUtil;private SoundPool soundPool;//单例模式public static SoundPoolUtil getInstance(Context context) {if (soundPoolUtil == null)soundPoolUtil = new SoundPoolUtil(context);return soundPoolUtil;}private SoundPoolUtil(Context context) {soundPool = new SoundPool(3, AudioManager.STREAM_SYSTEM, 0);//加载音频文件soundPool.load(context, R.raw.music1, 1);soundPool.load(context, R.raw.music2, 1);soundPool.load(context, R.raw.music3, 1);}public void play(int number) {Log.d("tag", "number " + number);//播放音频soundPool.play(number, 1, 1, 0, 0, 1);}
}

二、 抽取基类BaseActivity
1、通过枚举来限制音频播放种类
2、通过abstract让click方法在子类中实现
3、在子类click方法中控制播放哪种音频

package zz.btmusicdemo.base;import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.Toast;import zz.btmusicdemo.util.SoundPoolUtil;/*** Created by abc on 2019/10/16.* 可以设置按钮点击音效的基类activity*/public abstract class BaseActivity extends Activity implements View.OnClickListener {private SoundPoolUtil soundPoolUtil;private int soundId = 0;//默认播放 music1private MusicType musicType = MusicType.FIRST;/*** 设置点击按钮音乐类型** @param musicType FIRST SECOND THIRD三个参数*/public void setMusicType(MusicType musicType) {this.musicType = musicType;}/*** 定义枚举来限定按钮音乐类型*/public enum MusicType {FIRST, SECOND, THIRD}@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);soundPoolUtil = SoundPoolUtil.getInstance(this);}/*** 在该方法中调用setMusicType来控制点击音乐类型* @param v*/public abstract void click(View v);@Overridepublic void onClick(View v) {click(v);switch (musicType) {case FIRST:soundId = 1;break;case SECOND:soundId = 2;break;case THIRD:soundId = 3;break;}soundPoolUtil.play(soundId);}public void toast(String content) {Toast.makeText(this, content, Toast.LENGTH_SHORT).show();}
}

MainActivity代码:

package zz.btmusicdemo.activity;import android.os.Bundle;
import android.view.View;
import android.widget.Button;import zz.btmusicdemo.R;
import zz.btmusicdemo.base.BaseActivity;public class MainActivity extends BaseActivity {private Button button1;private Button button2;private Button button3;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button1 = (Button) findViewById(R.id.button1);button2 = (Button) findViewById(R.id.button2);button3 = (Button) findViewById(R.id.button3);button1.setOnClickListener(this);button2.setOnClickListener(this);button3.setOnClickListener(this);}@Overridepublic void click(View v) {switch (v.getId()) {case R.id.button1:setMusicType(MusicType.FIRST);toast("点击了按钮1");break;case R.id.button2:setMusicType(MusicType.SECOND);toast("点击了按钮2");break;case R.id.button3:setMusicType(MusicType.THIRD);toast("点击了按钮3");break;}}
}

-END

android按钮点击音效相关推荐

  1. android 点击事件两次,Android 按钮点击两次触发不同的事件

    标题:Android 按钮点击两次触发不同的事件 方案:采用flag标记的方式,每次单击标记为0,再次点击判断flag的值 package com.ldl.ui; import android.app ...

  2. Android 按钮点击设置静音

    Android开发按钮的时候,无论是原生的Button`ImageButton 还是TextView添加点击事件,在点击的时候都会有默认的bengbeng的点击声音(有点定制手机把声音去掉了). 在有 ...

  3. android按钮点击变化,Android实现按钮点击效果(第一次点击变色,第二次恢复)...

    1.首先创建一个按钮 android:id="@+id/click" android:layout_width="fill_parent" android:la ...

  4. android 按钮点击动画效果_如何用纯css打造类materialUI的按钮点击动画并封装成react组件...

    作为一个前端框架的重度使用者,在技术选型上也会非常注意其生态和完整性.笔者先后开发过基于vue,react,angular等框架的项目,碧如vue生态的elementUI, ant-design-vu ...

  5. android按钮点击事件(多种方法实现)

    上代码: package com.hsj.example.uicontroldemo01;import android.os.Bundle; import android.support.v7.app ...

  6. android按钮点击toast,关于button点击事件中setOnClick等元素的解读以及方法?以及toast的位置以及作用?...

    此文末参考链接: 此段代码的教程以及使用接口的方式.switch语句的教程链接为链接1. 汇总里说的有更多的实现方法,为链接2. 文中链接为视觉统一,链接均于文末,以上为方便文中跳转,加了文中的跳转链 ...

  7. android按钮点击无响应时间,AndroidStudio下的点击事件不响应

    本来是测试自定义Toast,发现 implements View.OnClickListener的Onclick事件怎么都不响应,开始以为是自定义的问题.结果当然不是:需要clean项目就好了,And ...

  8. android 按钮点击退出程序,Android:按下后退按钮退出应用程序

    在我的应用程序中,我希望退出应用程序时按下后退按钮,这是我的代码: @Override public void onBackPressed() { new AlertDialog.Builder(th ...

  9. android 按钮点击声音,如何在Android中单击按钮时播放声音?

    这里有一些事情(免责声明,这就是我习惯使用它的方式,可能有更好的方法): >您似乎每次点击的工作量比您需要的多得多.您正在为Activity的视图中的每次单击创建并添加新的onClickList ...

最新文章

  1. poj 1947(树形dp+背包问题)
  2. QML中MouseArea元素的介绍
  3. python产品缺陷_基于python从redmine-api中获取项目缺陷数据(1)
  4. upload Fiori application to ABAP server via report /UI5/UI5_REPOSITORY_LOAD
  5. mysql的initial_mysql Lost connection to MySQL server at ‘reading initial communication packet
  6. 设计模式(10)-----模板方法模式
  7. CCF201512-1 数位之和(100分)【进制+文本】
  8. CVPR 新规严禁审稿期间公开宣传论文,可发 arXiv,LeCun:疯了吧!
  9. ubuntu 使用gspca安装摄像头
  10. IT人员应该掌握的30种技能
  11. 空白页删不掉怎么办,wps怎么删除一页?
  12. android 监听飞行模式,如何在Android上检测飞行模式?
  13. SProject - 02.iPad生产力工具——Blink Shell移动设备随时随地写代码
  14. RFID银行钱箱资产管理系统
  15. Mediator模式(仲裁者设计模式)
  16. 淘宝网nbsp;E客服帐号nbsp;登录阿里旺旺时nbsp;…
  17. 排序函数sort()
  18. 一文详细理解计算机网络体系结构(考试和面试必备)
  19. x86架构手机_Intel也做过手机CPU?X86架构!曾今正面硬刚高通骁龙!结果唏嘘
  20. 解密阿里巴巴加密技术: 爬虫JS逆向实践-1688 【JS混淆加密解析】

热门文章

  1. 云原生的未来应用发展趋势
  2. 中兴新支点助力抗洪抢险应急演练,多角度、全方位细节一览无余!
  3. 桥接模式和中继模式的区别【转】
  4. Vj程序设计作业H11
  5. oracle orderby多个字段,Oracle的order by关键字
  6. 论文python+selenium网页自动化测试论文_毕业设计(论文)-基于selenium的web自动化测试.docx...
  7. linux怎么设置ie内核,怎么把易语言内核IE版本改成本地的内核版本!!
  8. 2021-08-30 黑马移动端头条项目-day02
  9. 批量图片水印工具 TSR WatermarkImage ——自定义水印批量操作
  10. 最新版快手去水印原理及源码,简单的原理与面临的挑战