改變 drawable 的顏色

public static Drawable tintDrawable(Drawable drawable, int color) {
        Drawable wd = DrawableCompat.wrap(drawable);
        DrawableCompat.setTint(wd, color);
        return wd;
    }


只要將使用中的drawable,用上面的方法處理,再拿來用,drawable的顏色就會改變。 這個方法可以用來處理ImageButton點擊後,ImageButton變色。方便許多。

ImageButton ibtn = findViewById(R.id.xxxx); iBtn.setBackground(getResources().getDrawable(R.drawable.xxxx)); ibtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ibtn.setBackground(tintDrawable(getResources().getDrawable(R.drawable.xxxx).mutate(), Color.Green)); new Handler().postDelayed(new Runnable() { @Override public void run() { iBtn.setBackground(getResources().getDrawable(R.drawable.xxxx)); } }, 1000); } });

現在ImageButton點擊後,會將原來的圖變成Color.GREEN的顏色,然後我們利用Handler,將原本未變色的ImageButton的圖再設定一次,就可以制造點擊時顏色按鈕顏色的改變了。

紅色標記的文字請自行修改。這裡有一個重點,藍色標記的mutate()代表這張圖的改變不影響其它也用到此張圖的物件。也就是說,如果沒有mutate(),其它用這張圖的物件也都會變成color.GREEN了。那麼,我們在handler中設置原圖就不起作用,因為原圖已經被Color.GREEN了,我們只是把被Color.GREEN過的圖再一次設為背景而以。

留言

這個網誌中的熱門文章

python 找圖自動點擊

Python pyserial 抓取系統內的 COM PORT

VBA EXCEL 工作表變化 馬上執行 的作法 Worksheet_Change