新しい Android サポートの更新により、ベクター型ドローアブルは下位互換性を獲得します。さまざまなパスを持つベクター画像があります。ボタンをクリックするか、入力値に基づいてプログラムでパスの色を変更したい。ベクターパスの名前パラメータにアクセスできますか? そして、色を変更します。
8 に答える
ベクター全体の色は、setTint を使用して変更できます。
次のように、レイアウト ファイルで ImageView を設定する必要があります。
<ImageView
android:id="@+id/myImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:tint="@color/my_nice_color"
android:src="@drawable/ic_my_drawable"
android:scaleType="fitCenter" />
次に、画像の色を変更するには:
DrawableCompat.setTint(myImageView.getDrawable(), ContextCompat.getColor(context, R.color.another_nice_color));
注:myImageView.getDrawable()
ベクター ドローアブルが背景として imageView に設定されている場合、nullpointerexception が発生します。
これを使用して、ベクター型ドローアブルのパスの色を変更します
VectorChildFinder vector = new VectorChildFinder(this, R.drawable.my_vector, imageView);
VectorDrawableCompat.VFullPath path1 = vector.findPathByName("path1");
path1.setFillColor(Color.RED);
この他の質問に対する私の回答を確認してください: https://stackoverflow.com/a/38418049/1335438。
テーマを使用し、パスをパラメータ化して動的に設定できるようにすることで、これを管理する方法についての優れたアイデアです。
この投稿で@Eyalが述べたように https://stackoverflow.com/a/32007436/4969047
実行時に個々のパスの色を変更することはできません。のソース コードを見るとVectorDrawableCompat
、内部要素を名前で公開する唯一のメソッドは、 のgetTargetByName
内部プライベートステート クラスVectorDrawableCompatState
に存在しVectorDrawableCompat
ます。
これはプライベート パッケージ (デフォルト) であるため、使用できません (リフレクションを使用しない限り)。