web-dev-qa-db-ja.com

レイヤーリストの色合いビットマップ

<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からそれが機能するはずであることを示しています: enter image description here

ただし、デバイスに展開しても色合いはありません。 enter image description here

レイアウトでImageViewを使用すると正しく色付けされますが、layer-listで失敗します。私はすべてのtintModeを試しましたが、結果は得られなかったと思います。

19

この質問に出くわすかもしれない他の誰かのために。これが私がしたことです。

セットアップ

  • Android Studio 2.3.2
  • ウィンドウズ10

    Gradle

  • minSdkVersion 15

  • targetSdkVersion 25
  • コンパイル 'com.Android.support:appcompat-v7:25.3.1'

テストデバイス

  • Asus Padfone X Android v4.4.2
  • サムスンギャラクシーS3 Android v6.0
  • サムスンギャラクシーS7 Android v7.0

レイヤードローアブル追加しました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));

    }
}

これがこの質問に出くわす他の人に役立つことを願っています。

8
Steve C.

ビットマップタグを使用して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>
0
Ranjith Kumar