2011-10-11 102 views
2

我想濫用標準按鈕作爲切換按鈕,但只有當它的longpressed。因此,我首先將背景圖像替換爲默認樣式,以獲得按下,聚焦和默認狀態。Android按鈕setPressed不會改變動畫

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:state_pressed="true" android:drawable="@drawable/btn_pressed" /> <!-- pressed --> 
     <item android:state_focused="true" android:drawable="@drawable/btn_focused" /> <!-- focused --> 
     <item android:drawable="@drawable/btn_default" /> <!-- default --> 

    </selector> 

我實現兩者onClickListener和OnLongClickListener如下:

private OnLongClickListener mFireHoldListener = new OnLongClickListener() { 

    @Override 
    public boolean onLongClick(View view) { 
     Log.i(TAG, "Long FIRE"); 

     Button btn = (Button) view; 
     btn.setPressed(true); 
     btn.invalidate(); 
     Log.i(TAG, "isPressed: " + btn.isPressed()); 

     return false; 
    } 

}; 

如果我執行長按,按鍵不其背景更改爲state_pressed。我怎樣才能保持按鈕按下?使用切換按鈕不起作用,因爲應該可以進行正常的點擊操作。如果按鈕按下的時間較長,則該按鈕會「鎖定」。

非常感謝

+1

上長按代替btn.setPressed(真),它works.It的正確方法;與btn.setBackgroungResource(R.drawable.btn_pressed); –

+0

非常感謝,它的作品。我不確定它是否是'乾淨'的方式,但它迄今給我帶來了期望的結果。 – Alx

回答

4

所以最後爲comparred使按鈕狀態deliberatly真正

@Override 
    public boolean onLongClick(View view) { 
     final Button btn = (Button) view; 
     btn.post(new Runnable(
      public void run() { 
       btn.setBackgroungResource(R.drawable.btn_pressed); 
      } 
     } 

     return false; 
    }