0

音频完成后,我的ProgressBar不会重置。它在一些音频后重置,但其他人不知道为什么。当音频完成后,如果任何人都可以提供帮助,那么也想暂停图标更改播放,那将非常棒!音频完成后ProgressBar不会重置

继承人代码:

public class player1 extends Activity implements Runnable { 


private MediaPlayer mp; 
private ProgressBar progressBar; 
private ImageButton pauseicon; 
private final int NUM_SOUND_FILES = 3; //*****REPLACE THIS WITH THE ACTUAL NUMBER OF SOUND FILES YOU HAVE***** 
private int mfile[] = new int[NUM_SOUND_FILES]; 
private Random rnd = new Random(); 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.player_1); 
     pauseicon = (ImageButton) findViewById(R.id.pauseicon); 
     progressBar = (ProgressBar) findViewById(R.id.progressBar); 
     getActionBar().setDisplayHomeAsUpEnabled(true); 



     mfile[0] = R.raw.sound01; //****REPLACE THESE WITH THE PROPER NAMES OF YOUR SOUND FILES 
     mfile[1] = R.raw.sound02; //PLACE THE SOUND FILES IN THE /res/raw/ FOLDER IN YOUR PROJECT***** 
     mfile[2] = R.raw.sound03; 
     // Listeners 
     /** 
     * Play button click event 
     * plays a song and changes button to pause image 
     * pauses a song and changes button to play image 
     * */ 


     try{ 
      mp = MediaPlayer.create(player1.this, mfile[rnd.nextInt(NUM_SOUND_FILES)]); 
      mp.seekTo(0); 
      mp.start(); ;   
      progressBar.setVisibility(ProgressBar.VISIBLE); 
      progressBar.setProgress(0); 
      progressBar.setMax(mp.getDuration()); 
      new Thread(this).start(); 

     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } 



     pauseicon.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       if (v.getId() == R.id.pauseicon) 
     if(mp.isPlaying()){ 
      mp.pause(); 
      ImageButton pauseicon =(ImageButton) findViewById(R.id.pauseicon); 

      pauseicon.setImageResource(R.drawable.playicon); 
     } else { 
      mp.start(); 

       ImageButton pauseicon =(ImageButton) findViewById(R.id.pauseicon); 

       pauseicon.setImageResource(R.drawable.pauseicon); 


      }}}); 

    } 

    public void run() { 
     int currentPosition= 0; 
     int total = mp.getDuration(); 
     while (mp!=null && currentPosition<total) { 
      try { 
       Thread.sleep(1000); 
       currentPosition= mp.getCurrentPosition(); 
      } catch (InterruptedException e) { 
       return; 
      } catch (Exception e) { 
       return; 
      }    
      progressBar.setProgress(currentPosition); 
     } 


    } 

    public boolean onOptionsItemSelected(MenuItem item){ 
     Intent myIntent = new Intent(getApplicationContext(), MainActivity.class); 
     startActivityForResult(myIntent, 0); 
     return true; 

     } 

    } 

回答

1

第一个问题:

在线程 “跑” 的方法,在while条件你说:

(currentPosition<total) 

这样“ currentPosition“值永远不会达到”total“值,并且您的进度条不会移动,您应该使用”小于或等于“:

(currentPosition<=total) 

这样的代码将是:

public void run() { 
    int currentPosition= 0; 
    int total = mp.getDuration(); 
    while (mp!=null && mp.isPlaying() && currentPosition<=total) { 
     try { 
      Thread.sleep(1000); 
      currentPosition= mp.getCurrentPosition(); 
     } catch (InterruptedException e) { 
      return; 
     } catch (Exception e) { 
      return; 
     }    
     progressBar.setProgress(currentPosition); 
    } 
} 

第二期:

mp.setOnCompletionListener(new OnCompletionListener() { 

     public void onCompletion(MediaPlayer mp) { 
      pauseicon.setImageResource(R.drawable.playicon); 
     } 
    }); 

您可以使用 “mp.setOnCompletionListener(本)” 像这样改变的ImageButton

在初始化mediaplayer时设置它,bef ore mp.start()

+0

非常感谢!你已经解决了我的第一个问题,那就是主要问题,所以再次感谢你!但第二个问题仍然存在。在音频结束时仍然停留为暂停图标。任何帮助?谢谢你,现在虽然:D – user2407147

+0

好吧,我编辑了我的答案。 – Abuzaid

+0

嘿,我试过了,仍然不起作用?任何其他建议,但这是尝试:) – user2407147

相关问题