还是以那个木鱼举例吧
点击木鱼(ImageButton),发出敲击声
首先准备一段音频,muyu.mp3,在res文件夹下新建一个资源文件夹raw,将muyu.mp3扔进去
然后新建一个类用来播放音频
AudioBtnUtils.java
package com.example.cyberwoodenfish; import android.content.Context; import android.media.AudioAttributes; import android.media.AudioManager; import android.media.SoundPool; public class AudioBtnUtils { private SoundPool.Builder builder; private SoundPool soundpool; private int soundId; public AudioBtnUtils(Context context,int rawsource,int loopnum) { builder = new SoundPool.Builder(); //AudioAttributes是一个封装音频各种属性的方法 AudioAttributes.Builder attrBuilder = new AudioAttributes.Builder(); //设置音频流的合适的属性 attrBuilder.setLegacyStreamType(AudioManager.STREAM_SYSTEM); soundpool = builder.build(); soundId = soundpool.load(context,rawsource, 1); //是否加载完成的监听 soundpool.setOnLoadCompleteListener((soundPool, sampleId, status) -> { //加载完毕后再播放 soundpool.play(soundId, 1f, 1f, 0, loopnum, 1); }); } }
注意上边加粗的部分,需要传入三个参数,Context上下文,我希望使用这同一个类能播放不同的音频,所以留了一个rawsource变量,
想播放什么音频就传入什么变量,loopnum表示的是重复次数,loop指定是否循环:-1表示无限循环,0表示不循环,其他值表示要重复播放的次数。
对java文件开刀
public class MainActivity extends Activity { private ImageButton ib_woodenfish; private Animation animation = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ib_woodenfish=findViewById(R.id.ib_woodenfish);
animation = AnimationUtils.loadAnimation(this, R.anim.muyutranslate); ib_woodenfish.setOnClickListener(new View.OnClickListener() { @SuppressLint("ResourceType") @Override public void onClick(View v) { ib_woodenfish.startAnimation(animation); AudioBtnUtils btnUtils2=new AudioBtnUtils(MainActivity.this,R.raw.muyu,0);//跟播放音频有关的就这一句
//。。。其他乱七八糟的已省略 } }); } }
现在敲击木鱼不光能看到木鱼的缩放动画了,还能听到敲木鱼的声音了。
标签:AudioBtnUtils,音频,soundpool,点击,音效,private,Android,ib,woodenfish From: https://www.cnblogs.com/soaring27221/p/16882010.html