There are a set of buttons, I want to get the result:
When I click one of them, first I divide them into two parts: the clicked one and the others. I'm trying to set different color or alpha value to different them.
Now I use setAlpha, but when I change the value from 0 to 255, it works, but when I change the value from 255 to 0 , it doesnot work. I don't know why.
Maybe after I invoke the methodButton.setAlpha(), I need invoke another method?
my code:
public class MainActivity extends Activity {
 // button alpha value: minimize value
 public static int BUTTON_ALPHA_MIN = 0;
 // button alpha value: maximize value
 public static int BUTTON_ALPHA_MAX = 255;
 private LinearLayout centerRegion;
 private LinearLayout bottomRegion;
 private Button btnCheckIn;
 private Button btnReview;
 private Button btnMyCircles;
 private Button btnSettings;
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  // get all the widgets
  getAllWidgets();
  // set buttons click response function
  btnCheckIn.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {
    centerRegion.setBackgroundColor(android.graphics.Color.RED);
    btnReview.getBackground().setAlpha(BUTTON_ALPHA_MIN);
    btnMyCircles.getBackground().setAlpha(BUTTON_ALPHA_MIN);
    btnSettings.getBackground().setAlpha(BUTTON_ALPHA_MIN);
    btnCheckIn.getBackground().setAlpha(BUTTON_ALPHA_MAX);
   }
  });
  btnReview.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {
    centerRegion.setBackgroundColor(android.graphics.Color.BLUE);
    btnCheckIn.getBackground().setAlpha(BUTTON_ALPHA_MIN);
    btnMyCircles.getBackground().setAlpha(BUTTON_ALPHA_MIN);
    btnSettings.getBackground().setAlpha(BUTTON_ALPHA_MIN);
    btnReview.getBackground().setAlpha(BUTTON_ALPHA_MAX);
   }
  });
  btnMyCircles.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {
    centerRegion.setBackgroundColor(android.graphics.Color.YELLOW);
    btnCheckIn.getBackground().setAlpha(BUTTON_ALPHA_MAX);
    btnReview.getBackground().setAlpha(BUTTON_ALPHA_MAX);
    btnSettings.getBackground().setAlpha(BUTTON_ALPHA_MAX);
    v.getBackground().setAlpha(BUTTON_ALPHA_MIN);
   }
  });
  btnSettings.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {
    centerRegion.setBackgroundColor(android.graphics.Color.MAGENTA);
    btnCheckIn.getBackground().setAlpha(BUTTON_ALPHA_MAX);
    btnReview.getBackground().setAlpha(BUTTON_ALPHA_MAX);
    btnMyCircles.getBackground().setAlpha(BUTTON_ALPHA_MAX);
    v.getBackground().setAlpha(BUTTON_ALPHA_MIN);
   }
  });
 }
 /**
  * get all the widgets
  */
 public void getAllWidgets() {
  this.centerRegion = (LinearLayout) this.findViewById(R.id.center_region);
  this.bottomRegion = (LinearLayout) this.findViewById(R.id.bottom_region);
  this.btnCheckIn = (Button) this.findViewById(R.id.button_check_in);
  this.btnReview = (Button) this.findViewById(R.id.button_review);
  this.btnMyCircles = (Button) this.findViewById(R.id.button_my_circles);
  this.btnSettings = (Button) this.findViewById(R.id.button_setting);
 }
}
                Using AlphaAnimation should work; verified on my device.
public class Test extends Activity implements OnClickListener {
    private AlphaAnimation alphaDown;
    private AlphaAnimation alphaUp;
    private Button b1;
    private Button b2;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LinearLayout ll = (LinearLayout) findViewById(R.id.linear_layout);
        b1 = new Button(this);
        b1.setText("Button 1");
        b1.setOnClickListener(this);
        ll.addView(b1);
        b2 = new Button(this);
        b2.setText("Button 2");
        b2.setOnClickListener(this);
        ll.addView(b2);
        alphaDown = new AlphaAnimation(1.0f, 0.3f);
        alphaUp = new AlphaAnimation(0.3f, 1.0f);
        alphaDown.setDuration(1000);
        alphaUp.setDuration(1000);
        alphaDown.setFillAfter(true);
        alphaUp.setFillAfter(true);
    }
    public void onClick(View v) {
        if (v == b1) {
            b1.startAnimation(alphaUp);
            b2.startAnimation(alphaDown);
        } else {
            b1.startAnimation(alphaDown);
            b2.startAnimation(alphaUp);
        }
    }
}
The key is calling setFillAfter(true) so that the alpha change persists.
Thanks for the question and the answer. This really helped me out.
For my solution, I needed to set the alpha of a button without seeing any animation effect, but the button.setAlpha(x) was failing sporadically. Using animations instead did the trick, but I had to set the duration to zero to get the automatic effect.
alphaDown = new AlphaAnimation(1.0f, 0.3f);
alphaUp = new AlphaAnimation(0.3f, 1.0f);
alphaDown.setDuration(0);
alphaUp.setDuration(0);
alphaDown.setFillAfter(true);
alphaUp.setFillAfter(true);
I use this for player controls in a media application, so I had something like this:
    boolean bInitPrevEnabled = m_btPrev.isEnabled();
    boolean bInitNextEnabled = m_btNext.isEnabled();
    boolean bInitPlayEnabled = m_btPlay.isEnabled();
    m_btPrev.setEnabled(true);
    m_btNext.setEnabled(true);
    m_btPlay.setEnabled(true);
    // Process enabling of the specific buttons depending on the state
    if (bInitPrevEnabled != m_btPrev.isEnabled())
            m_btPrev.startAnimation((m_btPrev.isEnabled()) ? alphaUp : alphaDown);
    if (bInitNextEnabled != m_btNext.isEnabled())
            m_btNext.startAnimation((m_btNext.isEnabled()) ? alphaUp : alphaDown);
    if (bInitPlayEnabled != m_btPlay.isEnabled())
            m_btPlay.startAnimation((m_btPlay.isEnabled()) ? alphaUp : alphaDown);
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With