2013-02-24 74 views
3

我想知道是否有方法在點擊時更改按鈕圖像。 最初,按鈕有一個暫停圖標。點擊時,我想要顯示播放圖標。每次按鈕被點擊時,圖標應該在播放和暫停之間變化。安卓更改按鈕圖標點擊時

有沒有辦法做到這一點?

XML版式文件:

<ImageButton 
    android:id="@+id/play" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="109dp" 
    android:src="@drawable/play_btn" 
    android:background="@null" /> 

play_btn.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/pause" android:state_selected="true" /> 
    <item android:drawable="@drawable/play" /> 
</selector> 

回答

3
Button mPlayButton; 

boolean isPlay = false; 
@Override 
public void onCreate(){ 
    mPlayButton = (Button) findViewById(R.id.play); 
    // Default button, if need set it in xml via background="@drawable/default" 
    mPlayButton.setBackgroundResource(R.drawable.default); 
    mPlayButton.setOnClickListener(mTogglePlayButton); 
} 

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

    @Override 
    public void onClick(View v){ 
     // change your button background 

     if(isPlay){ 
      v.setBackgroundResource(R.drawable.default); 
     }else{ 
      v.setBackgroundResource(R.drawable.playing); 
     } 

     isPlay = !isPlay; // reverse 
    } 

}; 
+0

這很有效,但只有當我點擊按鈕時,它纔會隨着每次點擊而來回變化。然而,在那之前沒有任何按鈕(在xml中只有一個「按鈕外殼」)。你知道如何讓一個按鈕出現(帶有你想要使用的第一個圖標),然後從這裏開始切換嗎?這部分很難。我嘗試添加一個可見的按鈕,但是當我點擊它時,切換不起作用,它只停留在原始設置按鈕上。 – Azurespot 2014-05-04 22:29:14

+1

安裝您自己的偵聽器是矯枉過正,更改背景資源會損壞按鈕的其他屬性(例如按顏色和形狀) – 2015-12-03 10:28:55

10

Android's Toggle Button用自定義選擇聽起來像你想要什麼。

你可能會使用類似這樣您按鈕的選擇:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/play_icon" android:state_checked="true" /> 
    <item android:drawable="@drawable/pause_icon" android:state_checked="false" /> 
</selector> 
+0

這是您唯一需要的嗎?所以如果你的按鈕被點擊,它會切換到另一個可繪製的,如果它再次點擊,它會切換回你的第一個可繪製的? – Azurespot 2014-05-04 21:18:31

5

讓我們的onClick字段添加到您的佈局你的按鈕的XML(需要API級別4起)

<ImageButton 
    android:id="@+id/play" 
    ... 
    android:onClick="buttonPressed" /> 

你的圖標可繪製pauseplay

跟蹤您的按鈕具有哪個圖標。

private boolean paused = true; 

public void buttonPressed(View view) { 

    ImageButton button = (ImageButton) view; 
    int icon; 

    if (paused) { 
     paused = false; 
     icon = R.drawable.pause; 
    else { 
     paused = true; 
     icon = R.drawable.play; 
    } 

    button.setImageDrawable(
     ContextCompat.getDrawable(getApplicationContext(), icon)); 


} 
+3

這比接受的答案要好,因爲它允許您只更改ImageButton的圖標而不更改其下面的背景形狀(如果使用的話)。 – Deemoe 2016-03-31 20:49:14