Android 点击触发音效

还是以那个木鱼举例吧

点击木鱼(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);//跟播放音频有关的就这一句

          //。。。其他乱七八糟的已省略 } }); } }

现在敲击木鱼不光能看到木鱼的缩放动画了,还能听到敲木鱼的声音了。

posted @ 2022-11-11 21:03  拾一贰叁  阅读(216)  评论(0编辑  收藏  举报