2

어떻게 재생 및 일시 중지 이미지 단추를 단일 이미지 단추로 만들 수 있습니까? 나는 아래에 나의 코드를 첨부 할 것이다. 이것은 사용 된 이미지입니다. i 재생을 시작으로 변경했습니다.미디어 플레이어 재생 안드로이드에서 일시 중지

import android.app.Activity; 
import android.media.MediaPlayer; 
import android.net.Uri; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ProgressBar; 


public class AudioView extends Activity{ 

MediaPlayer mp; 

    Button p,pu,s,b,f,h,v,c,bu; 

    ProgressBar myProgressBar; 

     Uri uri=Uri.parse("http://player.trackitdown.net/preview/289245/preview_c-90-feat-red-monkey-yo-dj-original-mix-dos-or-die-traxx.mp3"); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.audio_main); 

     Log.v("Start Of OnCreate","++"); 
     mp=MediaPlayer.create(this,uri); 


     final Button play = (Button) findViewById(R.id.play); 
     play.setBackgroundResource(R.drawable.start); 
     final Button pause = (Button) findViewById(R.id.pause); 
     pause.setBackgroundResource(R.drawable.pause); 
     final Button back = (Button) findViewById(R.id.back); 
     back.setBackgroundResource(R.drawable.backward); 
     final Button fwd = (Button) findViewById(R.id.fwd); 
     fwd.setBackgroundResource(R.drawable.forward); 

     p=(Button)findViewById(R.id.play); 
     pu=(Button)findViewById(R.id.pause); 
     pu.setVisibility(View.INVISIBLE); 
     //s=(Button)findViewById(R.id.stop); 
     b=(Button)findViewById(R.id.back); 
     f=(Button)findViewById(R.id.fwd); 

     Log.v("Button Objects","getting man"); 

     play.setOnClickListener(mListener); 
     pause.setOnClickListener(mListener); 
     back.setOnClickListener(mListener); 
     fwd.setOnClickListener(mListener); 


     myProgressBar=(ProgressBar)findViewById(R.id.progressbar_Horizontal); 

     myProgressBar.setProgress(0); 
     myProgressBar.setMax(mp.getDuration()); 


     Log.v("End Of OnCreate","--"); 




    } 
    private Runnable myThread = new Runnable(){ 

      public void run() { 
      // TODO Auto-generated method stub 
      while (mp.getCurrentPosition()<mp.getDuration()){ 
      try{ 
      //myHandle.sendMessage(myHandle.obtainMessage()); 
        myProgressBar.setProgress(mp.getCurrentPosition()); 
       //Thread.sleep(1000); 
      } 
      catch(Throwable t){ 
      } 
      } 
      } 

      }; 


    View.OnClickListener mListener = new View.OnClickListener(){ 

     public void onClick(View v) { 

      switch(v.getId()){ 

      case R.id.play: 

       try { 
        mp.prepare(); 
       } catch (Exception e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 


       mp.start(); 
       p.setVisibility(View.INVISIBLE); 
       pu.setVisibility(View.VISIBLE); 
       pu.setClickable(true); 
       p.setClickable(false); 
        //seekBar.setProgress(mp.getCurrentPosition()); 
        new Thread(myThread).start(); 

       break; 
      case R.id.pause: 
       mp.pause(); 
       pu.setClickable(false); 
       p.setVisibility(View.VISIBLE); 
       pu.setVisibility(View.INVISIBLE); 
       p.setClickable(true); 
       break; 

      case R.id.back: 
       int dur = mp.getCurrentPosition(); 
       int pos = (dur>10000 ? dur-5000:0); 
       mp.seekTo(pos); 
       break; 
      case R.id.fwd: 
       int curpos = mp.getCurrentPosition(); 
       int dur2 = mp.getDuration(); 

       int pos2 = (curpos+5000>dur2 ? dur2: curpos+5000); 
       mp.seekTo(pos2); 
       break; 


      } 

     } 


    }; 

    } 

그리고 XML은

<?xml version="1.0" encoding="UTF-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 

    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 

<LinearLayout android:orientation="vertical" 

    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom" 
    android:gravity="center" 
    > 

    <ImageView android:layout_width="176dp" 
       android:layout_height="208dp" 
       android:src="@drawable/audio_icon"/> 

     <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center"> 

     <Button 
     android:id="@+id/play" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     /> 

     <Button 
      android:id="@+id/pause" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="4dp" /> 

     <Button 
     android:id="@+id/back" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="4dp" 
     /> 
     <Button 
     android:id="@+id/fwd" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="4dp" 
     /> 

    </LinearLayout> 

    <ProgressBar 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    style="?android:attr/progressBarStyleHorizontal" 
    android:id="@+id/progressbar_Horizontal" 
    /> 

</LinearLayout> 
</LinearLayout> 
+0

간단합니다. 동일한 버튼을 사용하고 런타임에 자원을 간단히 교체하여 재생 및 일시 중지를 번갈아 수행 할 수 있습니다. – Teovald

답변

2
처음에는 재생 말을 당신의 버튼을 변경

. 재생 및 일시 정지 코드를 하나로 결합하십시오. 플래그를 설정하고 확인하여 재생 또는 일시 중지가 눌러져 있는지 확인하고 그에 따라 텍스트를 변경하십시오.

boolean play=true, pause=false; 

    final Button playPause = (Button) findViewById(R.id.play); 
      playPause.setBackgroundResource(R.drawable.start); 

    playPause.setOnClickListener(mListener); 

지금, 당신의 청취자 코드에서 다음을 수행하십시오 :

case R.id.play: 

      if(play) 
      { 
       play=false; 
       pause=true; 

       //change image for button 
       playPause.setBackgroundResource(R.drawable.start); 

       try { 
        mp.prepare(); 
       } catch (Exception e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 


       mp.start(); 
       p.setVisibility(View.INVISIBLE); 
       pu.setVisibility(View.VISIBLE); 
       pu.setClickable(true); 
       p.setClickable(false); 
        //seekBar.setProgress(mp.getCurrentPosition()); 
        new Thread(myThread).start(); 

       } 
      if(pause) 
      { 
       play=true; 
       pause=false; 

       //change image for button 
       playPause.setBackgroundResource(R.drawable.pause); 

       mp.pause(); 
       pu.setClickable(false); 
       p.setVisibility(View.VISIBLE); 
       pu.setVisibility(View.INVISIBLE); 
       p.setClickable(true); 
      } 
      break; 

변경 그에 따라 버튼의 텍스트

그래서 당신은 단지 하나 개의 버튼과 두 개의 부울 필드를해야합니다.

2

는 다음과 같은 코드를 사용할 수 있습니다 :

:

if(!mp.isPlaying() || isCompleted) { 
    isCompleted = false; 
    mp.start(); 
} else { 
    mp.pause(); 
} 

가 변형을 추가

private boolean isCompleted = true; 

리스너를 추가 :

mp.setOnCompletionListener(new OnCompletionListener(){ 

     @Override 
     public void onCompletion(MediaPlayer mp) { 
      // TODO Auto-generated method stub 
      isCompleted = true; 
     }} 
    ); 
관련 문제