2016-04-23 50 views
2

我正在使用Android Studio,我想知道是否有任何方式添加兩個圖像到一個按鈕,並且只有其中一個可見(活動)在AndroidStudio將兩個圖像添加到一個按鈕

現在我使用以下方法: 在我的活動我有4個按鍵和所有的人我註冊一個View.OnTouchListener和我管理的事件,它是這樣的:在這所以

private class ButtonOnTouchListener implements View.OnTouchListener { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     int eventaction = event.getAction(); 
     switch (eventaction) { 
      case MotionEvent.ACTION_DOWN: 
       clickButton(v); 
       return true; 
      case MotionEvent.ACTION_UP: 
       unClickButton(v); 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) { 
        v.callOnClick(); 
       } 

       break; 
     } 

     // tell the system that we handled the event but a further processing is required 
     return false; 
    } 

    private void clickButton(View button) { 
     switch (button.getId()) { 
      case R.id.buttonLogin: 
       button.setBackgroundResource(R.drawable.activity_main_button_enter_press); 
       break; 
      case R.id.buttonRegister: 
       button.setBackgroundResource(R.drawable.activity_main_button_registration_press); 
       break; 
      case R.id.buttonCheckUpdate: 
       button.setBackgroundResource(R.drawable.activity_main_button_update_check_press); 
       break; 
      case R.id.buttonExit: 
       button.setBackgroundResource(R.drawable.activity_main_button_exit_press); 
       break; 
     } 
    } 

    private void unClickButton(View button) { 
     switch (button.getId()) { 
      case R.id.buttonLogin: 
       button.setBackgroundResource(R.drawable.activity_main_button_enter_idle); 
       break; 
      case R.id.buttonRegister: 
       button.setBackgroundResource(R.drawable.activity_main_button_registration_idle); 
       break; 
      case R.id.buttonCheckUpdate: 
       button.setBackgroundResource(R.drawable.activity_main_button_update_check_idle); 
       break; 
      case R.id.buttonExit: 
       button.setBackgroundResource(R.drawable.activity_main_button_exit_idle); 
       break; 
     } 
    } 
} 

我在事件中進行切換以確定哪個按鈕被點擊並更改適當的資源。這意味着對於每個活動,我必須創建一個自定義類並在事件中進行切換。

我可以做類似如下:

private void ClickButton(View button){ 
     button.setBackgroundResource(button.getResourceImage1); 
     } 

    private void unClickButton(View button){ 
     button.setBackgroundResource(button.getResourceImage2); 
     } 

這樣我可以做一個全球OnTouchListener,只是設置在XML文件中的圖像的每一個按鈕,不用擔心任何Java代碼。

我試圖在background/​​圖像之間切換,但由於某些原因我無法隱藏前景圖像。

回答

1

你可以做一個繪製文件選擇用於此目的 像這樣:

button_selector.xml

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

並在按鈕的點擊你的Java代碼:

btn.setSelected(!btn.isSelected()); 

並設置選擇繪製文件到您的按鈕:

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/button_selector.xml" 
    android:text="Click_me"/> 
+0

奇怪,它只能在我第一次按下按鈕。下一次我按下它不會改變。有任何想法嗎? –

+0

哦,對不起,我沒有清除我之前更改圖片的所有代碼。它現在有效。這是答案,謝謝! :) –

+0

歡迎光臨。享受:) –

0

您可以爲每個按鈕創建一個State List Drawable並實現android:state_pressed

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