<layer-list>内のビットマップに色合いを適用しようとしています
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="oval">
<solid Android:color="@color/grey" />
<size Android:width="45dp" Android:height="45dp"/>
</shape>
</item>
<item Android:left="5dp" Android:right="5dp" Android:top="5dp" Android:bottom="5dp">
<bitmap Android:src="@drawable/ic_action" Android:tint="#FF000000" />
</item>
</layer-list>
プレビューは、Android-STUDIOからそれが機能するはずであることを示しています:
ただし、デバイスに展開しても色合いはありません。
レイアウトでImageViewを使用すると正しく色付けされますが、layer-listで失敗します。私はすべてのtintModeを試しましたが、結果は得られなかったと思います。
この質問に出くわすかもしれない他の誰かのために。これが私がしたことです。
ウィンドウズ10
minSdkVersion 15
レイヤードローアブル追加しましたAndroid:id=@+id/bitmapID
ビットマップを含むアイテムへ
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item>
<shape Android:shape="oval">
<solid Android:color="#9e9e9e" />
<size Android:width="45dp" Android:height="45dp"/>
</shape>
</item>
<item
Android:id="@+id/tintDrawableImg"
Android:left="5dp"
Android:right="5dp"
Android:top="5dp"
Android:bottom="5dp">
<bitmap Android:src="@mipmap/ic_pencil" Android:tint="#860000" />
</item>
</layer-list>
アクティビティレイアウト ImageViewに描画可能なレイヤーを追加しました
<ImageView
Android:id="@+id/tintLayerTest"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerInParent="true"
Android:src="@drawable/test_layer"/>
MainActivity onCreate()メソッドでは、findViewByIDを使用して描画可能なレイヤーからビットマップを見つけることができます
public class MainActivity extends AppCompatActivity {
ImageView iv;
LayerDrawable ld;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Declare ImageView containing LayerDrawable
iv = (ImageView)findViewById(R.id.tintLayerTest);
//Get LayerDrawable from ImageView
ld = (LayerDrawable)iv.getDrawable();
//Get specific Drawable/Bitmap from within LayerDrawable
//by ID and pass it as an independent Drawable
Drawable ldDrawable = ld.findDrawableByLayerId(R.id.tintDrawableImg);
//Pass your new Drawable to DrawableCompat.setTint
//and define your color int
DrawableCompat.setTint(ldDrawable, ContextCompat.getColor(this, R.color.colorAccent));
}
}
これがこの質問に出くわす他の人に役立つことを願っています。
ビットマップタグを使用してxmlドローアブルで試してください
次のファイルxmlcustom_image.xmlを保存し、アイコンと色合いの色を置き換えます
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:src="@drawable/iv_veg"
Android:tint="@color/red">
</bitmap>