带有声音的图像按钮无法正常工作 [英] Imagebutton with sound is not working

查看:67
本文介绍了带有声音的图像按钮无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在android studio中制作了一个有10个imagebutton的程序,单击每个imagebutton都会产生声音.但是,当我在模拟器上运行它们时,只有前7个imagebutton会产生声音(不在乎我单击的按钮的顺序).我对此很陌生,请帮助我,这是我的代码:

i made a program in android studio which has 10 imagebutton, each imagebutton when clicked will produce a sound. However, when i run them on emulator only first 7 imagebutton will produce a sound (don't care what order the button i clicked on). Im new to this, help me, This is my code:

public class playtimang extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_playtimang);

    final MediaPlayer satukecik = MediaPlayer.create(this, R.raw.one_kecik);
    final MediaPlayer satubesar = MediaPlayer.create(this, R.raw.one_besar);
    final MediaPlayer duakecik = MediaPlayer.create(this, R.raw.two_kecik);
    final MediaPlayer duabesar = MediaPlayer.create(this, R.raw.two_besar);
    final MediaPlayer tigakecik = MediaPlayer.create(this, R.raw.three_kecik);
    final MediaPlayer tigabesar = MediaPlayer.create(this, R.raw.three_besar);
    final MediaPlayer limakecik = MediaPlayer.create(this, R.raw.five_kecik);
    final MediaPlayer limabesar = MediaPlayer.create(this, R.raw.five_besar);
    final MediaPlayer enamkecik = MediaPlayer.create(this, R.raw.six_kecik);
    final MediaPlayer enambesar = MediaPlayer.create(this, R.raw.six_besar);

    ImageButton satu_kecikIB = (ImageButton) this.findViewById(R.id.satukecikIB);
    ImageButton satu_besarIB = (ImageButton) this.findViewById(R.id.satubesarIB);
    ImageButton dua_kecikIB = (ImageButton) this.findViewById(R.id.duakecikIB);
    ImageButton dua_besarIB = (ImageButton) this.findViewById(R.id.duabesarIB);
    ImageButton tiga_kecikIB = (ImageButton) this.findViewById(R.id.tigakecikIB);
    ImageButton tiga_besarIB = (ImageButton) this.findViewById(R.id.tigabesarIB);
    ImageButton lima_kecikIB = (ImageButton) this.findViewById(R.id.limakecikIB);
    ImageButton lima_besarIB = (ImageButton) this.findViewById(R.id.limabesarIB);
    ImageButton enam_kecikIB = (ImageButton) this.findViewById(R.id.enamkecikIB);
    ImageButton enam_besarIB = (ImageButton) this.findViewById(R.id.enambesarIB);

    satu_kecikIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            satukecik.start();
        }
    });

    satu_besarIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            satubesar.start();
        }
    });

    dua_kecikIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            duakecik.start();
        }
    });

    dua_besarIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            duabesar.start();
        }
    });

    tiga_kecikIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            tigakecik.start();
        }
    });

    tiga_besarIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            tigabesar.start();
        }
    });

    lima_kecikIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            limakecik.start();
        }
    });

    lima_besarIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            limabesar.start();
        }
    });

    enam_kecikIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            enamkecik.start();
        }
    });

    enam_besarIB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            enambesar.start();
        }
    });


}

}

推荐答案

由于MediaPlayer是为某些长期运行的或较大的媒体文件(包括各种格式的视频,音频)制作的,因此不好用它来作一些小调因为它本身包含要执行的大量计算.要使用MediaPlayer,有一个架构图.好吧,您应该使用SoundPool,因为它仅用于此类目的.

As MediaPlayer is made for some long running or big media files which includes various formats of Videos, audios so making use of it for some small tones is bad because it itself includes big calculations to perform. There is a architecture diagram to follow to make use of MediaPlayer well instead you should use SoundPool because it is designed for such purposes only.

现在,您问题的主要答案是

Now the main answer to your problem is

如官方文档所述

创建"已在API级别1中添加

"Create" Added in API level 1

MediaPlayer创建(上下文上下文,int resid)

MediaPlayer create (Context context, int resid)

为给定资源ID创建MediaPlayer的便捷方法.成功后,将已经调用prepare(),并且不能再次调用.使用MediaPlayer完成后,应调用release()释放资源.如果未发布,那么太多的MediaPlayer实例将导致异常.请注意,由于在此方法中会自动调用prepare(),因此您无法更改新MediaPlayer.

Convenience method to create a MediaPlayer for a given resource id. On success, prepare() will already have been called and must not be called again.When done with the MediaPlayer, you should call release(), to free the resources. If not released, too many MediaPlayer instances will result in an exception. Note that since prepare() is called automatically in this method, you cannot change the audio stream type (see setAudioStreamType(int)), audio session ID (see setAudioSessionId(int)) or audio attributes (see setAudioAttributes(AudioAttributes) of the new MediaPlayer.

简而言之,您必须遵循MediaPlayer的状态图,以确保免受此类错误或异常的影响.您必须在每次调用后调用release方法来释放资源.

In short you must follow the state diagram of MediaPlayer to get safety from such kind of errors or exceptions. You must call release method to release the resources after every call.

这篇关于带有声音的图像按钮无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆