带声音的图像按钮不起作用
Imagebutton with sound is not working
我在android工作室做了一个程序,里面有10个imagebutton,点击每个imagebutton都会发出声音。但是,当我 运行 它们在模拟器上时,只有前 7 个 imagebutton 会发出声音(不关心我点击按钮的顺序)。我是新手,帮帮我,这是我的代码:
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
,请遵循 architecture diagram 而不是您应该使用 SoundPool
,因为它专为此类目的而设计。
现在您的问题的主要答案是
如官方文档所述
"Create" Added in API level 1
MediaPlayer create (Context context, int resid)
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方法释放资源
我在android工作室做了一个程序,里面有10个imagebutton,点击每个imagebutton都会发出声音。但是,当我 运行 它们在模拟器上时,只有前 7 个 imagebutton 会发出声音(不关心我点击按钮的顺序)。我是新手,帮帮我,这是我的代码:
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
,请遵循 architecture diagram 而不是您应该使用 SoundPool
,因为它专为此类目的而设计。
现在您的问题的主要答案是
如官方文档所述
"Create" Added in API level 1
MediaPlayer create (Context context, int resid)
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方法释放资源