2010-07-16 13 views
5

Android Düğme setAlpha, ben sonuç almak istiyorum: tıklandığında bir ve diğerleri: düğme kümesi vardır

İlk iki bölümden bölün bunlardan birini tıklayın

. Farklı renkler veya alfa değerleri farklı olarak ayarlamaya çalışıyorum.

Şimdi setAlpha kullanıyorum ama 255 ila değerini değiştirmek, bunun çalışıyor, ama 0 ila değerini değiştirmek, bunun çalışmalarını etmediğinden. Nedenini bilmiyorum. Ben yöntemini Button.setAlpha() çağırmak Belki sonra

, başka bir yöntemi çağırmak gerek?

kodum:

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

cevap

10

AlphaAnimation çalışmalıdır kullanma; cihazımda doğrulandı.

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

anahtar alfa değişikliği kalması için setFillAfter(true) çağırmaktadır. sorunuz ve yanıtı

+0

Çalışıyorum, ama işe yaramaması üzücü bir durumdur. –

+0

@ZHAO Çözümü buldum - yukarıda kodum düzenlenmiş. İyi şanslar! –

+0

Çok teşekkürler. iyi çalışıyor. –

2

teşekkürler. Bu gerçekten bana yardımcı oldu. Benim çözüm için

, ben her animasyon efekti görmeden bir düğmeye alfa ayarlamak için gerekli, ancak button.setAlpha (x) sporadik başarısız oldu. Bunun yerine animasyonları kullanmak hile yaptı, ancak otomatik etkiyi elde etmek için süreyi sıfıra ayarladım.

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

Bir medya uygulamasında oyuncu kontrolleri için kullanacağız, bu yüzden böyle bir şey vardı:

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

Bu benim :)

0

public void setAlpha (int için çalışıyor a) - < alfaf

public void setAlpha (float a) (kaldırıldı1f) API düzeyinde eklenmiştir 11