Android如何给按钮添加点击音效
作者:HELLO丶GUY 发布时间:2022-06-24 02:05:05
标签:Android,按钮,点击音效
有很多制作精良的APP都自带点击音效,那么如何简单的来实现这一效果,这里需要使用到的一个概念叫做SoundPool,这个类主要用于播放一些比较小的音频文件,因为比较方便,通常用在游戏里比较多。
代码
闲话不多说,我们现在需要做一个功能,就是点击某一按钮的时候同时播放音效出来。
首先准备好你的音频文件,然后,在你的rec下面简历一个文件夹命名为raw,放入音频文件,如图所示:
然后布局文件只有一个按钮
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btnPlay"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_margin="5dp"
android:text="Play Wav"
tools:ignore="HardcodedText" />
</LinearLayout>
然后是MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btnPlay;
private SoundPool soundPool;//声明一个SoundPool
private int soundID;//创建某个声音对应的音频ID
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
btnPlay = (Button) findViewById(R.id.btnPlay);
btnPlay.setOnClickListener(this);
initSound();
}
@SuppressLint("NewApi")
private void initSound() {
soundPool = new SoundPool.Builder().build();
soundID = soundPool.load(this, R.raw.testsong, 1);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnPlay:
playSound();
break;
}
}
private void playSound() {
soundPool.play(
soundID,
0.1f, //左耳道音量【0~1】
0.5f, //右耳道音量【0~1】
0, //播放优先级【0表示最低优先级】
1, //循环模式【0表示循环一次,-1表示一直循环,其他表示数字+1表示当前数字对应的循环次数】
1 //播放速度【1是正常,范围从0~2】
);
}
}
这样当你点击按钮的时候就会自动播放音效,要注意,这里初始化SoundPool的方法是安卓5.0以后提供的新方式,5.0以前的话可以使用:
soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
其中构造方法放参数不在解释,随着安卓的发展,5.0之前的份额也会越来越少,所以在以后的文中尽量使用比较新的SDK提供的方法。
以上代码完成后在手机上运行,点击可以听到音效。
来源:http://www.jianshu.com/p/ba2f87a0b15d


猜你喜欢
- 一、EPL II 格式及打印测试注意N命令前的换行和最后P1后的换行。将此段代码复制到windows记事本里另存为Print.ext,文件名
- Android EditText的光标的显示和隐藏一、java代码1.编辑框的光标 显示的方法:editText.setCursorVisi
- 前言在使用easyExcel读取文件时,对于Excel的表头,在解析读取时分成不同的状态,需要加以区分.1 环境准备准备一个可以正常访问的S
- 将下列字符串,依照|拆分成数组:String numbers = "1|2|3|4|5";使用split拆分String
- 目录一、个性化主题设置二、字体设置代码编辑区字体控制台字体左侧与顶部菜单栏字体三、常用设置优化一、 鼠标滚轮调整代码编辑区字体大小;二、代码
- 详解Android使用@hide的API的方法今天早上想修改MediaPlaybackService.Java(/packages/apps
- 1、使用FileStream读写文件 文件头:using System;using System.Collections.Gene
- 今天使用mybatis-plus自动填充插入和更新时间有8小时时差后来发现只需要修改一下mybaits连接的url即可原先我是用的datas
- 本文运用图片给大家介绍了C#如何检查foreach判读其是否为null,我们下面话不多说,直接来看内容吧。1、foreach遍历列表或数组时
- 一直做Android前端,今天突然心血来潮想搭建一个后台玩玩。平时都是需要什么样的接口直接出个接口文档扔给后台的兄弟,自己从来不操心他们内部
- 背景传统 SpringMVC 项目中,我们可以定义容器初始化 Servlet ,然后在 web.xml 配置该 Servlet ,指定 lo
- 一、判断语句最常用的顺序结构只能顺序执行,并不能进行判断和选择。于是便有了下面两种分支结构if语句switch语句1. if语句一个if语句
- 一、传入dll前,在C#中申请内存空间c#里面的指针即 IntPtr申请如下:IntPtr SrcImgData = Marshal.All
- 1、fragment简介我对fragment的理解是基于activity的,对于大多数的基本开始发时,我们最先遇到的就是用activity来
- 问题当我们数据库中的字段和实体类中的字段不一致的时候,查询会出问题数据库字段是 pwdid name pwd1 张三 1234562 李四
- 说点废话Android开发中,TextView类的控件应该说是很常用了。一般来说我们是通过android:textSize="20
- 引言在前两篇文章中,我们了解了ReentrantLock内部公平锁和非公平锁的实现原理,可以知道其底层基于AQS,使用双向链表实现,同时在线
- 关于ListBoxListBox是WinForm中的列表控件,它提供了一个项目列表(一组数据项),用户可以选择一个或者多个条目,当列表项目过
- 这篇文章主要介绍了Java GZIP压缩与解压缩代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 提到锁,大家肯定想到的是sychronized关键字。是用它可以解决一切并发问题,但是,对于系统吞吐量要求更高的话,我们这提供几个小技巧。帮