下面是在我的项目中播放音频的代码。当我点击播放按钮时,它会变为暂停按钮,我正在通过我的Application类中的init()方法播放音频。我面临的问题是点击播放后按钮需要几秒钟(5-10秒),然后播放按钮变为暂停。但它应立即更改为暂停按钮,因为我在onClick()内的第一个语句是holder.pause.setVisibility(View.VISIBLE);
。但是,如果我注释掉init方法调用行ProjectApplication.getInstance().init(mCtxt, lMoment.getProjectMediaLoc(), holder.lVisualizerView, lAudioProgressBar,holder.Image,holder.Image2);
,它会立即更改为暂停按钮,但播放音频需要使用init方法。如果我使用postDelayed()方法并在2秒后调用init()方法,那么它将作为但是我无法理解为什么init()方法在更改可视性和暂停按钮的可见性时会产生问题,因为在更改可见性之后会调用init方法()。
holder.play.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
holder.pause.setVisibility(View.VISIBLE);
holder.play.setVisibility(View.INVISIBLE);
ProjectApplication.getInstance().init(mCtxt, lMoment.getProjectMediaLoc(), holder.lVisualizerView, lAudioProgressBar,holder.play,holder.pause);
notifyDataSetChanged();
}
});
ProjectApplication.java
public void init(Context mCtxt,String aAudioUrl, final VisualizerView mVisulizerView,final ProgressBar lAudioProgressBar,final ImageView play,final ImageView pause )
{
lAudioProgressBar.setVisibility(View.VISIBLE);
mProjectPlayer= MediaPlayer.create(mCtxt, Uri.parse(aAudioUrl));
mProjectPlayer.setLooping(false);
mProjectPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
Log.e("msg","start");
mProjectPlayer.start();
mProgressbar.setVisibility(View.GONE);
lAudioProgressBar.setVisibility(View.INVISIBLE);
mProjectPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
play.setVisibility(View.VISIBLE);
pause.setVisibility(View.INVISIBLE);
mVisulizerView.setVisibility(View.INVISIBLE);
ProjectApplication.getInstance().cleanUp(mVisulizerView);
HomeFragment.projectListAdapter.notifyDataSetChanged();
}
});
}
});