2011-12-25 57 views
1

一個新手問題。Android - 更改由onClick事件觸發的LayerDrawable項目的Alpha值

我試圖在layer-list內更改bitmap itemalpha value

drawable xml如下:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <bitmap android:src="@drawable/img_btn" android:gravity="center"/> 
    </item> 
    <item> 
     <bitmap android:src="@drawable/image_frame" android:gravity="center"/> 
    </item> 
</layer-list> 

MainActivity如下:

public class MainActivity extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     MainApp.show(this); 
     addListeners(); 
     changeAlpha(128); 
    } 

    private void changeAlpha(int opc){ 
     ImageView img = (ImageView) findViewById(R.id.img_A); 
     LayerDrawable layer = (LayerDrawable) img.getDrawable(); 
     BitmapDrawable bg = (BitmapDrawable) layer.getDrawable(0); 
     bg.setAlpha(opc); 
    } 

    private void addListeners() { 
     ImageView img = (ImageView) findViewById(R.id.img_A); 

     View.OnClickListener imageAClickListener = new View.OnClickListener() { 
      public void onClick(View view) { 
       changeAlpha(255); 
      } 
     }; 

     img.setOnClickListener(imageAClickListener); 
    } 

    public void onBackPressed() { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage(Definitions.CONFIRM_EXIT) 
       .setCancelable(false) 
       .setPositiveButton(Definitions.YES, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         MainActivity.this.finish(); 
        } 
       }) 
       .setNegativeButton(Definitions.NO, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         dialog.cancel(); 
        } 
       }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
    } 
} 

changeAlpha(從onCreate)第一次調用工作得很好,但是當我打電話從方法click事件它什麼也沒做(沒有失敗)

我錯過了什麼?

回答

2

嘗試添加

img.invalidate(); 

您changeAlpha()方法的最後一行。

+0

謝謝!那個技巧 – 2011-12-25 12:19:11

+0

很酷!我希望你明白問題所在。重繪是需要的。當您在onCreate中設置它時,圖像會自動呈現第一次。但後來當你修改它時,你必須重新繪製它。經典的java有一個很好的方法叫做repaint()。 Android採取更加被動的方式我猜:P:P:P – Shaunak 2011-12-25 12:25:20

+0

再次感謝您的闡述,我猜想這是問題所在。 – 2011-12-25 15:59:52

0

在某些情況下,您應該撥打img.setImageDrawable(layer),它會導致重新粉刷。