2016-09-14 62 views
1

當我按下按鈕時圖像發生變化,但我的問題是當我釋放按鈕時,圖像再次發生變化(不保留圖像)。我是Java編程新手。按下按鈕時更改圖像,使按鈕圖像在釋放時不發生變化

我的佈局:

<Button 
    android:background="@drawable/volume" 
    android:layout_width="90dp" 
    android:layout_height="90dp" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true"/> 

這是我在繪製XML:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" 
    android:drawable="@drawable/volume_off" /> <!-- pressed --> 

<item android:drawable="@drawable/volume_on" /> <!-- default --> 

+0

我想也許你真正需要的東西是ToggleButton – RRTW

+0

它的作品,,,感謝所有,,,我真的很感激它。 –

回答

0

如果你想改變你的按鈕的圖像永久當你點擊它,可以方便地做到這一點編程,你的按鈕的onclick空洞內。 例如,如果

此搜索:R.drawable.image_first 圖像2:R.drawable.image_second

,並在你的XML佈局文件你必須:

<Button 
    android:background="@drawable/volume" 
    android:layout_width="90dp" 
    android:layout_height="90dp" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:onClick="click"/> 
中,你可以做的活動

public Class myActivity extends Activity{ 

Button mButton; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.myactivity_layout); 
    mButton = (Button) findViewById(R.id.button); 
} 

public void click(View v){ 
    mButton.setBackgroundResource(R.drawable.image_second); 
} 

} 

如果你想再次點擊後回來之前的圖像,只保存按鈕的狀態(布爾點擊ed = true/false)並在public void click中放置一個if語句。

+0

yess,它的工作原理,,,但正如你所說,回到以前的形象,我應該在裏面,如果聲明,,,我混淆如何在公共空間內的聲明如果在巴斯科avr和arduino IDE,我可以輕鬆理解,但在Java中,我真的不明白,,,你會給示例代碼,如果聲明在公共空白...感謝之前, –

+0

感謝亞歷克斯,你讓我的一天..:D –

0

要從選擇刪除默認圖像

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" 
android:drawable="@drawable/volume_off" /> <!-- pressed --> 
</selector> 

刪除此行<!--<item android:drawable="@drawable/volume_on" /> remove default-->

當按鈕狀態改變時,它被設置爲默認值。

<Button 
android:background="@drawable/volume" 
android:layout_width="90dp" 
android:layout_height="90dp" 
android:src="@drawable/volume_on" 
android:layout_centerVertical="true" 
android:layout_centerHorizontal="true"/> 
+0

如果我刪除該行,所以按鈕是不可見的,按鈕是可見的(顯示Volume_off),當我按下按鈕, –

1

在你的情況,你想改變你的音量指示器,我認爲你應該這樣做編程。

//At the top of your activity,declare a global variable 
    boolean isVolumeOn = true; 

    volumeButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        //check your volume status 
        if(isVolumeOn){ 
         view.setBackgroundResource(R.drawable.volume_off); 
         isVolumeOn = false; 
         //Turn off your volume here 

        }else{ 
         view.setBackgroundResource(R.drawable.volume_on); 
         isVolumeOn = true 
         //Turn on your volume here 

        } 
       } 
      }); 
+0

感謝QuangNguyen迴應我的問題,我不明白與「isVolumeOn」。那什麼意識? 可否給我更清楚的示例程序,對不起,我這裏是新的.. –

+0

感謝QungNguyen,我真的很感激它 –

+0

您是否添加了用戶可以打開或關閉應用程序中的音量的功能? –

0
我content_main.xml

<Button 
    android:id="@+id/button" 
    android:background="@drawable/volume_on" 
    android:layout_width="90dp" 
    android:layout_height="90dp" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:onClick="click" /> 

在我MainActivity.java

public Class myActivity extends AppCompatActivity{ 

鍵音量; boolean isPressed = false;

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.myactivity_layout); 
    volume = (Button) findViewById(R.id.button); 
} 

public void click(View v){ 
if (isPressed) { 
    volume.setBackgroundResource(R.drawable.volume_off); 
    Toast.makeText(this, "Volume Off", 
      Toast.LENGTH_SHORT).show(); 
}else{ 
    volume.setBackgroundResource(R.drawable.volume_on); 
    Toast.makeText(this, "Volume On", 
      Toast.LENGTH_SHORT).show(); 
} 
    isPressed=!isPressed; 
}