在android中更改oncomplete监听器上的音频播放器的暂停按钮

时间:2015-02-04 07:40:24

标签: android audio

我正在将音频声音加载到列表视图中,我播放它们。当音频播放完成后,我想更改该特定声音的暂停按钮再次播放按钮。 这是我播放声音的代码

soundChild.setOnClickListener(new View.OnClickListener() {


            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub


                try {

                    player.setDataSource(url);
                    // file.close();
                    player.prepare();
                    player.setLooping(false);
                    // player.start();

                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalArgumentException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (SecurityException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalStateException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                if (player.isPlaying()) {
                    if (player != null) {
                        player.pause();
                        // Changing button image to play button
                        soundChild.setImageResource(R.drawable.playbutton);
                    }
                } else {
                    // Resume song
                    if (player != null) {
                        player.start();
                        // Changing button image to pause button
                        soundChild.setImageResource(R.drawable.pausebutton);
                    }
                }
            }
        });

          player.setOnCompletionListener(new OnCompletionListener() {

          @Override public void onCompletion(MediaPlayer mp) { // TODO
         // Auto-generated method stub player.release(); player=null;
              Toast.makeText(_context, "complete", Toast.LENGTH_LONG).show();

              soundChild.setImageResource(R.drawable.playbutton);

              player.reset();


          } });

但是在完整的列表器上,播放器按钮的图像视图永远不会改回来再次播放图像视图。我不知道我在哪里做错了,因为如果调用onComplete,那么imageview背景也应该改变。请帮助。

1 个答案:

答案 0 :(得分:0)

通常你必须在之前调用requestLayout:

      soundChild.requestLayout();
      soundChild.setImageResource(R.drawable.playbutton);

然后更改图像后

      soundChild.invalidate();

你还能尝试什么?如果不起作用,您也可以尝试:

      soundChild.setImageDrawable(context.getResources().getDrawable(R.drawable.playbutton));

因为,就像在setImageResource的API中描述的那样:

  

这可以在UI线程上进行Bitmap读取和解码   引起延迟打嗝

另外,它有可能,你必须在ui线程上调用它:

      runOnUiThread(new Runnable() {

          @Override
           public void run() {
               soundChild.setImageResource(R.drawable.playbutton);
              }
         });

并在onCompletion中调用它。