Android按钮setAlpha

ZHA*_*ian 5 android button

有一组按钮,我想得到结果:

当我点击其中一个时,首先我将它们分成两部分:点击的一个和其他部分.我正在尝试为不同的颜色或alpha值设置不同的颜色或alpha值.

现在我使用setAlpha,但是当我将值从0更改为255时,它可以工作,但是当我将值从255更改为0时,它不起作用.我不知道为什么.

也许在我调用方法之后Button.setAlpha(),我需要调用另一个方法?

我的代码:

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);
 }
}
Run Code Online (Sandbox Code Playgroud)

And*_*ang 10

使用AlphaAnimation应该工作; 在我的设备上验证.

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

关键是调用,setFillAfter(true)以便alpha更改持续存在.