2014-02-23 25 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 –