2010-07-16 13 views
5

eine Reihe von Tasten Es gibt, möchte ich das Ergebnis erhalten:Android Knopf setAlpha

Wenn ich einen von ihnen klicken, zuerst ich sie in zwei Teile unterteilen: die eine und die anderen angeklickt. Ich versuche, unterschiedliche Farbe oder Alpha-Wert zu verschiedenen ihnen zu setzen.

Jetzt benutze ich setAlpha, aber wenn ich den Wert von 0 bis 255 ändern, es funktioniert, aber wenn ich den Wert von 255-0 ändern, es doesnot Arbeit. Ich weiß nicht warum.

Vielleicht, nachdem ich die Methode Button.setAlpha() aufrufen, muss ich eine andere Methode aufrufen?

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

Antwort

10

Mit AlphaAnimation sollte funktionieren; verifiziert auf meinem Gerät.

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

Der Schlüssel setFillAfter(true) so fordert, dass die Alpha-Änderung weiterhin besteht.

+0

Ich versuche es, aber es ist schade, dass es nicht funktioniert –

+0

@ZHAO Ich fand eine Lösung - bearbeitete meinen Code oben. Viel Glück! –

+0

Vielen Dank. Es funktioniert gut. Danke! –

2

Danke für die Frage und die Antwort. Das hat mir wirklich geholfen.

Für meine Lösung musste ich das Alpha einer Schaltfläche festlegen, ohne einen Animationseffekt zu sehen, aber die button.setAlpha (x) war sporadisch fehlerhaft. Die Verwendung von Animationen hat den Trick gemacht, aber ich musste die Dauer auf Null setzen, um den automatischen Effekt zu erhalten.

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

Ich benutze diese für Spieler kontrolliert in einer Medienanwendung, also musste ich etwas wie folgt aus:

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

Dies funktioniert für mich :)

0

public void setAlpha (int alpha) - veraltet

öffentliche void setAlpha (float alpha) (0f < alpha < 1f) Hinzugefügt in API Ebene 11