2016-04-23 93 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>