2014-02-23 21 views
0

在第一個OnCreate中,我有一個button_stop SetImageResource,它在按下時將圖標更改爲靜音圖標,但在我的代碼中,我想輸入一個函數,該函數說明mp.start();做另一個SetImageResource使同一個按鈕顯示一個揚聲器而不是一個靜音圖標。On mp.start();怎麼做setImageResource?

如何使它在mp.start();這個函數被調用?

button_stop.setImageResource(R.drawable.ic_action_volume_on); 

我想要做的是在聲音按鈕(button_1,button_2)被擠壓,button_stop顯示揚聲器圖標。但是,當按下button_stop時,它會顯示靜音圖標(並釋放MediaPlayer)。

當按下button_stop按鈕時,我可以使其釋放MediaPlayer並將圖像更改爲靜音圖標,但是,在按下聲音按鈕(button_1)後打開MediaPlayer後無法使其顯示揚聲器圖標等等)

這是我目前的代碼。我嘗試在onClick中輸入SetImageResource,但它會停止正確調用MediaPlayer。

import android.app.Activity; 
import android.app.PendingIntent; 
import android.app.TaskStackBuilder; 
import android.content.Intent; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.support.v4.app.NotificationCompat; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.Window; 
import android.widget.Button; 
import android.widget.ImageView; 

/** 
* @author Prabu 
* 
*/ 
public class MainActivity extends Activity implements OnClickListener{ 
    private MediaPlayer mp; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     setVolumeControlStream(AudioManager.STREAM_MUSIC); 
     Button button1=(Button)findViewById(R.id.button_1); 
     Button button2=(Button)findViewById(R.id.button_2); 
     final ImageView button_stop=(ImageView)findViewById(R.id.button_stop); 
     button1.setOnClickListener(this); 
     button2.setOnClickListener(this); 
     button_stop.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       if(null!=mp){ 
        mp.release(); 
        button_stop.setImageResource(R.drawable.ic_action_volume_muted); 
        } 
      }}); 
    } 

    public void onClick(View v) { 
     int resId; 
     switch (v.getId()) { 
     case R.id.button_1: 
      resId = R.raw.a; 
      break; 
     case R.id.button_2: 
      resId = R.raw.b; 
      break; 
     default: 
      resId = R.raw.a; 
      break; 
     } 
     // Release any resources from previous MediaPlayer 
     if (mp != null) { 
      mp.release(); 
     } 
     // Create a new MediaPlayer to play this sound 
     mp = MediaPlayer.create(this, resId); 
     mp.setLooping(true); 
     mp.start(); 

    }{ 


         } 
    @Override 
    protected void onDestroy() { 
     if(null!=mp){ 
      mp.release(); 
     } 
     super.onDestroy(); 
    }} 
+0

你的問題是什麼?這裏 –

+0

在當前選擇的代碼中,我沒有進入將ImageResource設置爲spesker圖標的功能,因爲我無法將它放置在任何可用的位置。我想知道是否有人可以在代碼中指出它應該去哪裏,以便它能夠工作。在第一個OnCreate中,我有一個button_stop SetImageResource,它可以在按下時將圖標更改爲靜音圖標,但在我的代碼中,我想輸入一個函數,該函數在mp.start();做另一個SetImageResource使同一個按鈕顯示一個揚聲器而不是一個靜音圖標。 – rossd

+0

把這個解釋放到你的question.plz –

回答

3

所以我對你想要的東西的理解僅僅是爲音箱圖像爲當mp.start()調用。我只在mp.start()的代碼中看到一個實例,所以當這種情況發生時,這將改變停止按鈕上的圖像。

public void onClick(View v) { 
    int resId; 
    switch (v.getId()) { 
    case R.id.button_1: 
     resId = R.raw.a; 
     break; 
    case R.id.button_2: 
     resId = R.raw.b; 
     break; 
    default: 
     resId = R.raw.a; 
     break; 
    } 
    // Release any resources from previous MediaPlayer 
    if (mp != null) { 
     mp.release(); 
    } 
    // Create a new MediaPlayer to play this sound 
    mp = MediaPlayer.create(this, resId); 
    mp.setLooping(true); 
    mp.start(); 

    //This is the added code to set the stop button. 
    ImageView button_stop=(ImageView)findViewById(R.id.button_stop); 
    button_stop.setImageResource(R.drawable.ic_action_volume_on); 

} 
+0

這是完美的,正是我所期待的!我曾嘗試過自己,雖然在看了你的代碼後,我失敗的原因是因爲我沒有進入** ImageView button_stop =(ImageView)findViewById(R.id.button_stop); **我以爲它已經在前面說過了我不必再做一次。 – rossd

+0

如果你把它放在一個全局變量中,你不必在這裏再次「找到」它。但findViewById是快速的...特別是如果你正在搜索直接父視圖。它只是搜索整數列表。 – NameSpace

1

使用setBackgroundResource(R.id.img)而不是setImageResource(R.id.image)會解決這個問題。更換你的這部分代碼:

button_stop.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      if(null!=mp){ 
       mp.release(); 
       button_stop.setBackgroundResource(R.drawable.ic_action_volume_muted); 
       } 
     }}); 

我希望它能幫助

+0

設置圖像資源已經在內部調用invalidate()。 – NameSpace

+0

我用'setBackgroundResource()'編輯了我的答案@ @ user3126670 –