tags:

views:

51

answers:

1

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. try to set different color or alpha value to different them.

give me some advice. thx.

now I use setAlpha, but when I change the value from 0 to 255, it work, but when i change the value from 255 to 0 , it doesnot work. I don't know why.

Maybe after I invoke the method"Button.setAlpha()", I need invoke other 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); } }

A: 

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.

Andy Zhang
I try it, but it is a pity that it does not work
ZHAO Xiaojian
@ZHAO I found a solution - edited my code above. Good luck!
Andy Zhang
thank u very much. it works well.thank u!
ZHAO Xiaojian