2016-04-23 9 views
2

私はAndroidスタジオを使用しています。ボタンに2つの画像を追加し、そのうちの1つだけを表示(アクティブ)するには、?私は4つのボタンを持っている私の活動で をし、それらのすべてに私はView.OnTouchListenerを登録していると私はこのようなことでイベントを管理:ボタンに2つの画像を追加するAndroidスタジオ

今、私は以下の技術を使用しています

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; 
     } 
    } 
} 

だから、これでどのようなボタンがクリックされたかを判断し、適切なリソースを変更するためにイベントでスイッチを作っています。つまり、各アクティビティに対してカスタムクラスを作成し、イベントでスイッチを実行する必要があります。私はグローバルOnTouchListener作り、ちょうど各ボタンのXMLファイル内の画像を設定し、任意のJavaコードを気にすることはできません

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

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

この方法:

は、私は次のようなものを作るでした。

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

歓迎です。 Enjoy :) –

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> 
関連する問題