2012-12-29 75 views
1

在Mono中對於Android,我有一個ImageButton,我想在用戶按住按鈕時更改其圖像。並且當用戶釋放按鈕圖像時應該改變爲上一個圖像。我用下面的代碼嘗試,但什麼也沒有發生:更改ImageButton的圖像按下並釋放

private void _goForward_KeyPress(object sender, View.KeyEventArgs e) 
    { 
     if(e.Event.Action == KeyEventActions.Down) 
     { 
      _goForward.SetImageResource(Resource.Drawable.arrowUpGreen); 
      //Then do some stuff 
     } 
     else 
     { 
      _goForward.SetImageResource(Resource.Drawable.arrowUpRed); 
      //Then do some stuff 
     } 
    } 

我不知道如果我用正確的情況下這樣做。在這種情況下應該使用什麼事件?

+0

您的意思是設置按鈕的背景圖像???? –

+0

沒有您嘗試過ImageButton –

+0

的實際圖像? –

回答

1

你需要你的方法附加到按鈕的KeyPress事件也被稱爲,由於佈線不會自動發生:

_goForward.KeyPress += _goForward_KeyPress; 

編輯

哎呀,我應該有第一次更仔細地閱讀這個問題。既然你想勾當按鈕被觸摸到,你想要的Touch事件,而不是:

_goForward.Touch += _goForward_Touch; 

private void _goForward_Touch(object sender, View.TouchEventArgs touchEventArgs) 
{ 
    if (touchEventArgs.Event.Action == MotionEventActions.Down) 
    { 
     Toast.MakeText(this, "down", ToastLength.Short).Show(); 
    } 
    else 
    { 
     Toast.MakeText(this, "up", ToastLength.Short).Show(); 
    } 
} 
+0

我已經附加了KeyPress事件。但事件處理程序中的條件似乎沒有做任何事情。 –

5

試試這個:

使用選擇此

說出它的名稱爲:background_drawable.xml

<selector 
    xmlns:android="http://schemas.android.com/apk/res/android">  
    <item  
     android:drawable="@drawable/YOUR_IMAGE_WHEN_PRESSED" 
     android:state_pressed="true" /> 
    <item 
     android:drawable="@drawable/YOUR_IMAGE_WHEN_FOCUSED" 
     android:state_focused="true" /> 
    <item 
     android:drawable="@drawable/YOUR_IMAGE_WHEN_NOT_ENABLED" 
     android:state_enabled="false" 
     /> 
    <item 
     android:drawable="@drawable/DEFAULT_IMAGE_WHICH_YOU_WANT_ALWAYS" /> 
</selector> 

而在你的main.xml文件

<ImageButton 
      android:background="@drawable/background_drawable"/> 
+0

我真的想在代碼中動態地做到這一點,因爲在每個新聞稿中我想執行更多的代碼。 –

+0

因此,你可以註冊你ImageButton onClickListener或OnLongClickListener隊友 –

+2

這是肯定的正確答案。尼克建議的選擇器方法只會影響按鈕的外觀(即按下時更改按鈕)。然後,您需要爲其他事件註冊一個偵聽器,並在代碼中執行相應的操作(執行其他方法)。當然,這是最好的方法。 – Booger