2010-07-16 18 views
5

Hay un conjunto de botones, quiero obtener el resultado:Botón Android setAlpha

Al hacer clic en uno de ellos, en primer lugar los divido en dos partes: el hecho clic en uno y los demás. Estoy tratando de establecer diferentes valores de color o alfa para diferentes.

Ahora uso setAlpha, pero cuando cambio el valor de 0 a 255 , funciona, pero cuando cambio el valor de 255-0, doesnot trabajo. No sé por qué.

Tal vez después de invocar el método Button.setAlpha(), ¿necesito invocar otro método?

mi código:

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); 
} 
} 

Respuesta

10

Usando AlphaAnimation debe trabajar; verificado en mi dispositivo.

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); 
     } 
    } 
} 

La clave está llamando setFillAfter(true) modo que el cambio alfa persiste.

+0

Lo intento, pero es una lástima que no funcione –

+0

@ZHAO Encontré una solución - edité mi código anterior. ¡Buena suerte! –

+0

muchas gracias. funciona bien. ¡gracias! –

2

Gracias por la pregunta y la respuesta. Esto realmente me ayudó.

Para mi solución, necesitaba configurar el alfa de un botón sin ver ningún efecto de animación, pero el botón.setAlpha (x) estaba fallando esporádicamente. El uso de animaciones fue el truco, pero tuve que establecer la duración en cero para obtener el efecto automático.

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); 

Puedo utilizar esto para que controle el jugador en una aplicación multimedia, así que tuve algo como esto:

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); 
0
Button btn; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    btn = (Button) findViewById(R.id.main_btn); 
    Drawable d = getResources().getDrawable(R.drawable.imagen); 
    d.setAlpha(60); 
    btn.setBackgroundDrawable(d); 
} 

Esto funciona para mí :)

0

setAlpha public void (int alpha) - obsoleto

public void setAlpha (float alpha) (0f < alpha < 1f) Agregado en el nivel API 11