还是以那个木鱼举例吧
点击木鱼(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);//跟播放音频有关的就这一句
//。。。其他乱七八糟的已省略
}
});
}
}
现在敲击木鱼不光能看到木鱼的缩放动画了,还能听到敲木鱼的声音了。