2017-06-29 114 views
-2

讓我澄清這個問題。我有4個圖像按鈕,我想更改按下的按鈕的圖標,然後如果我按另一個按鈕,所以下一個按鈕應該更改,最後一個應該返回到其上一個圖標。如何在Android中動態更改按下的ImageButton的圖標?

注意:該示例是Instagram。當你點擊每個圖標時,你會看到一些灰色圖標,它會變成黑色。當你點擊另一個時,最後一個變成灰色,新的變成黑色。

+2

使用不同的可繪製了按鈕的不同狀態。 – SripadRaj

+0

@SripadRaj我是新來的android編程可以給我一個例子嗎? :) – Amin

+0

你可以檢查這個解決方案嗎?https://stackoverflow.com/questions/32534076/what-is-the-best-way-to-do-a-button-group-that-c​​an-be-selected- and-activate-inde – ViramP

回答

1

您可以使用下面的代碼創建在繪製文件夾中的XML文件,並使用它作爲一個圖像繪製:

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

    </selector> 

,並使用不同的圖像,這取決於按下狀態。

+0

此代碼僅在您按下半秒鐘時更改圖標顏色。我如何保持按下的顏色,直到我按下其他圖標?像Instagram。 – Amin

+0

在上面的代碼添加一個多個狀態: <項機器人:抽拉= 「@繪製/ button_focused_orange」 機器人:state_selected = 「真」/> 和呼叫 iv.setSelected(真); 用於所選按鈕和 iv.setSelected(false); 用於未選按鈕。 它會工作。 –

+0

我已經添加狀態選擇,它仍然不工作。 – Amin

1
public class CamTestActivity extends Activity implements View.OnClickListener{ 

    Button b1,b2,b3,b4; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     b1 = (Button)findViewById(R.id.btn1); 
     b2 = (Button)findViewById(R.id.btn2); 
     b3 = (Button)findViewById(R.id.btn3); 
     b4 = (Button)findViewById(R.id.btn4); 

     b1.setOnClickListener(this); 
     b2.setOnClickListener(this); 
     b3.setOnClickListener(this); 
     b4.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 

     int id = v.getId(); 
     switch (id){ 

      case R.id.btn1: 
       pressbtn1(); 
       break; 

      case R.id.btn2: 
       pressbtn2(); 
       break; 

      case R.id.btn3: 
       pressbtn3(); 
       break; 

      case R.id.btn4: 
       pressbtn4(); 
       break; 
     } 

    } 

    private void pressbtn4() { 
     b1.setBackgroundColor(getResources().getColor(R.color.color_gray)); 
     b2.setBackgroundColor(getResources().getColor(R.color.color_gray)); 
     b3.setBackgroundColor(getResources().getColor(R.color.color_gray)); 
     b4.setBackgroundColor(getResources().getColor(R.color.color_black)); 
    } 

    private void pressbtn3() { 
     b1.setBackgroundColor(getResources().getColor(R.color.color_gray)); 
     b2.setBackgroundColor(getResources().getColor(R.color.color_gray)); 
     b3.setBackgroundColor(getResources().getColor(R.color.color_black)); 
     b4.setBackgroundColor(getResources().getColor(R.color.color_gray)); 
    } 

    private void pressbtn2() { 
     b1.setBackgroundColor(getResources().getColor(R.color.color_gray)); 
     b2.setBackgroundColor(getResources().getColor(R.color.color_black)); 
     b3.setBackgroundColor(getResources().getColor(R.color.color_gray)); 
     b4.setBackgroundColor(getResources().getColor(R.color.color_gray)); 
    } 

    private void pressbtn1() { 
     b1.setBackgroundColor(getResources().getColor(R.color.color_black)); 
     b2.setBackgroundColor(getResources().getColor(R.color.color_gray)); 
     b3.setBackgroundColor(getResources().getColor(R.color.color_gray)); 
     b4.setBackgroundColor(getResources().getColor(R.color.color_gray)); 
    } 
} 
+0

我不想改變背景顏色。我想完全改變圖標。有每個按鈕1的2個圖標是灰色的,1個是黑色的。我想要將圖標1變爲黑色時,點擊(其餘灰色),圖標2變爲黑色(其餘灰色)等等 – Amin

+0

因爲我改變了顏色..您可以更改圖標。 Like b1.setBackgroundColor(getResources()。getColor(R.color.color_gray)); –

1

Java代碼:

public void onAnyButtonCLick(View view) 
    { 

    for (int i = 0; i < parent_layout.getChildCount(); i++) { 
      View v = parent_layout.getChildAt(i); 
    // Check v is button 
    if(v instanceof Button) 
    { 

    // set all button with grey color background 
     v.setBackgroundColor(getResources().getColor(R.color.color_gray)); 

    } 

    } // loop ends 

    // color the current click button with black. 
    view.setBackgroundColor(getResources().getColor(R.color.color_black)); 


    } // end of click 

XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/parent_layout" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:weightSum="2"> 



    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="First Button" 

     android:onClick="button_click"/> 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Second Button" 
     android:onClick="button_click"/> 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Third Button" 
     android:onClick="button_click"/> 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Forth Button" 
     android:onClick="button_click"/> 

</LinearLayout> 


// Hope it Helps !! 
相關問題