2014-10-26 277 views
1

我對android編程頗爲陌生,而且碰到了一個凹凸。我想製作一個按鈕,它可以在按下時改變它的狀態,所以它必須按下狀態並且不按下按鈕。我設法讓按鈕更改狀態爲按下並保持這種狀態,但我不知道如何在再次單擊時讓它回到未按下的狀態。 這是我的代碼。按鈕狀態更改

<Button 
    android:id="@+id/scaunstg" 
    android:layout_width="170dp" 
    android:layout_height="70dp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:background="@drawable/scaunstg" 
    android:baselineAlignBottom="true" 
    android:clickable="true" /> 

該按鈕有一個xml文件,用於控制顯示的圖像。

scaunstg.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     // show interest in events resulting from ACTION_DOWN 
     if(event.getAction()==MotionEvent.ACTION_DOWN) return true; 

     // don't handle event unless its ACTION_UP so "doSomething()" only runs once. 
     if(event.getAction()!=MotionEvent.ACTION_UP) return false; 
     // doSomething(); 
     scaunstg.setPressed(true);     
     return true; 
    } 
}); 

任何想法?

謝謝。

+0

不要忘了添加android標籤,如果你在談論android :) – 2014-10-26 16:40:05

回答

0

我們不需要每次都調用setPressed(true),而是需要獲取按鈕的當前狀態,然後將setPressed調用到相反的位置。因此,如果按下按鈕,我們要調用setPressed(false),如果該按鈕未按下,則setPressed(true)。

我們可以使用按鈕的isPressed()方法,然後使用not運算符(!)來獲得相反的結果。

scaunstg.setOnTouchListener(new OnTouchListener() 
{ 
    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     // show interest in events resulting from ACTION_DOWN 
     if (event.getAction() == MotionEvent.ACTION_DOWN) 
      return true; 

     // don't handle event unless its ACTION_UP so "doSomething()" only runs once. 
     if (event.getAction() != MotionEvent.ACTION_UP) 
      return false; 

     // doSomething(); 
     scaunstg.setPressed(!scaunstg.isPressed()); 
     return true; 
    } 
}); 
0

所以,你可以通過XML.To做到這一點更確切地說,在創建文件夾繪製一個XML文件(創建文件夾也一樣,如果你沒有它尚未)

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
    android:state_enabled="false" 
    android:drawable="@drawable/btn_sendemail_disable" /> 
    <item 
    android:state_pressed="true" 
    android:state_enabled="true" 
    android:drawable="@drawable/btn_send_email_click" /> 
    <item 
    android:state_focused="true" 
    android:state_enabled="true" 
    android:drawable="@drawable/btn_sendemail_roll" /> 
    <item 
    android:state_enabled="true" 
    android:drawable="@drawable/btn_sendemail" /> 
</selector> 

所以,你只需將你的按鈕作爲資源鏈接到這個XML文件。

+0

只是爲了記錄,從Java改變圖像的背景並不是真正的資源友好。它實際上是一種不好的方式來處理這個事情。 – Vlad 2014-10-26 17:12:09