2013-08-08 2 views
0

Я просто хочу установить изображение кнопки, которое нужно изменить при нажатии. Например, если я хочу нажать кнопку А, он изменится. Если я нажму кнопку B, его изображение изменится, и изображение кнопки A вернется назад. Как я могу это сделать? Мне очень нужна помощь в этом вопросе.В Android-программировании, как изменить изображение кнопки после нажатия?

package com.example.mobile_nurse; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.view.Window; 
import android.widget.ImageButton; 

public class Posture_1 extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_posture_1); 
     Back(); 
     _1minute(); 
     _15minute(); 
    } 
    private void _15minute() { 
     ImageButton Button1 = (ImageButton) findViewById(R.id.imageButton3); 
     ImageButton Button4 = (ImageButton) findViewById(R.id.imageButton4); 
     View.OnClickListener myListener = new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      Button1.setBackgroundResource(R.drawable.posms1_button1_null); 
      Button4.setBackgroundResource(R.drawable.posms1_button_a); 
      } 
     }; 
     Button1.setOnClickListener(myListener); 
    } 
    private void _1minute() { 
     ImageButton Button1 = (ImageButton) findViewById(R.id.imageButton3); 
     ImageButton Button4 = (ImageButton) findViewById(R.id.imageButton4); 
     View.OnClickListener myListener = new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      Button1.setBackgroundResource(R.drawable.posms1_button1); 
      Button4.setBackgroundResource(R.drawable.posms1_button_a_null); 
      } 
     }; 
     Button1.setOnClickListener(myListener); 
    } 
    private void Back() { 
     ImageButton Button = (ImageButton) findViewById(R.id.imageButton1); 
     View.OnClickListener myListener = new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       finish(); 
      } 
     }; 
     Button.setOnClickListener(myListener); 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.posture_1, menu); 
     return true; 
    } 

} 
+0

Попробуйте ** селектор ** [ссылка] (http://stackoverflow.com/questions/14023886/android-button-selector) – ryderz8

ответ

0
setBackgroundResource updates background not the Image 

так использование setImageDrawable(getResources().getDrawable(R.drawable.your_Image))

внутри _15minute() change to

Button1.setImageDrawable(getResources().getDrawable(R.drawable.posms1_button1_null) 
Button4.setImageDrawable(getResources().getDrawable(R.drawable.posms1_button_a) 

и внутри _1minute() change to

Button1.setImageDrawable(getResources().getDrawable(R.drawable.posms1_button1) 
Button4.setImageDrawable(getResources().getDrawable(R.drawable.posms1_button_a_null) 
+0

Это работало отлично! Благодаря! –

+0

@ChristopherTreanor приветствуется :) –

2

селектор Try для этого:

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

вы можете изменить свое состояние в соответствии с вашими потребностями

0

см StateListDrawable и его представление в XML: <selector> тег

0

Попробуйте так это просто пример кода

`

final Button b1 = (Button) findViewById(R.id.button1); 
    final Button b2 = (Button) findViewById(R.id.button2); 
    b1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      b1.setBackgroundResource(R.drawable.imagesa); 
      b2.setBackgroundColor(Color.TRANSPARENT); 
     } 
    }); 
    b2.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      b2.setBackgroundResource(R.drawable.imagesa); 
      b1.setBackgroundColor(Color.TRANSPARENT); 
     } 
    });` 
+0

Вы можете использовать другое изображение, чтобы избежать TRANSPARENT – Amsheer

0

Я думаю, вы должны использовать ImageView как кнопку вместо selector, указанную в ответе Хариша.

С ImageView вы можете установить Src вытяжку в level-list, то вы можете контролировать level (вытяжку) по телефону setImageLevel(int)

сохранить следующее res/drawable/level.xml

<?xml version="1.0" encoding="utf-8"?> 
<level-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item 
     android:maxLevel="0"> 
     <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
      <stroke android:width="2dp" android:color="@android:color/black" /> 
      <solid android:color="#333" /> 
      <padding android:bottom="2dp" android:left="5dp" android:right="5dp" android:top="2dp" /> 
      <corners android:radius="5dp" /> 
     </shape> 
    </item> 
    <item 
     android:maxLevel="1"> 
     <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
      <stroke android:width="2dp" android:color="@android:color/black" /> 
      <solid android:color="#FF6699" /> 
      <padding android:bottom="2dp" android:left="5dp" android:right="5dp" android:top="2dp" /> 
      <corners android:radius="5dp" /> 
     </shape> 
    </item> 
</level-list> 

тогда ваш activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <ImageView 
     android:id="@+id/level_image" 
     android:layout_width="80dp" 
     android:layout_height="40dp" 
     android:src="@drawable/level" /> 
</RelativeLayout> 

, то ваш onCreate() метод

int count = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final ImageView img = (ImageView) findViewById(R.id.level_image); 
    img.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (count%2==0) img.setImageLevel(1); 
      else img.setImageLevel(0); 
      count++; 
     } 

    }); 
} 

В вашем случае вы можете создать несколько ImageViews, используя список уровней.

0

попробуйте этот код:

Button1.setOnClickListener(new OnClickListener(){ 
    public void onClick(View view){ 
     //enter your code 

     //remove background 
     Button4.setBackground(null); //or 
     Button4.setBackgroundColor(Color.WHITE); 

     Button1.setBackgroundResource(R.drawable.posms1_button1); 

    } 
}); 
Смежные вопросы