kojiko-android’s blog

開発中にハマった時の解決策や、忘れがちなことを残しておきます。

shapeで定義した図形の色を動的に変える方法

xmlでshapeにより定義した図形に、動的にカラーフィルターをかける方法です

以下のようなshapeのリソースを、後述するリニアレイアウトのバックグラウンドに指定しているとします。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="5dp" />
    <stroke android:width="2dp"/>
</shape>


コードから、上のshapeの図形にカラーフィルターをかけていきます。

>|java|
LinearLayout linearLayout = (LinearLayout)dialog.findViewById(R.id.sample_linear_layout_id);

Drawable drawable = linearLayout.getBackground();

// Drawableを取得し


drawable.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);

// カラーフィルターをかけます


linearLayout.setBackground(drawable);

// 再びセットし直します
|


drawable.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
引数が2つありますが、ひとつめに被せたい色、2つめに効果を指定します。
PorterDuff.Mode.SRC_ATOPを指定することで、不透明部分に色を乗せることができます。

独自のユーザーインターフェイスを作る際に重宝します!