49

新しい Android サポートの更新により、ベクター型ドローアブルは下位互換性を獲得します。さまざまなパスを持つベクター画像があります。ボタンをクリックするか、入力値に基づいてプログラムでパスの色を変更したい。ベクターパスの名前パラメータにアクセスできますか? そして、色を変更します。

4

8 に答える 8

57

ベクター全体の色は、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 が発生します。

于 2016-04-04T10:44:24.307 に答える
39

これを使用して、ベクター型ドローアブルのパスの色を変更します

VectorChildFinder vector = new VectorChildFinder(this, R.drawable.my_vector, imageView);

VectorDrawableCompat.VFullPath path1 = vector.findPathByName("path1");
path1.setFillColor(Color.RED); 

ライブラリはこちら: https://github.com/devsideal/VectorChildFinder

于 2018-02-03T07:48:38.200 に答える
2

この他の質問に対する私の回答を確認してください: https://stackoverflow.com/a/38418049/1335438

テーマを使用し、パスをパラメータ化して動的に設定できるようにすることで、これを管理する方法についての優れたアイデアです。

于 2016-07-17T05:04:39.040 に答える
0

この投稿で@Eyalが述べたように https://stackoverflow.com/a/32007436/4969047

実行時に個々のパスの色を変更することはできません。のソース コードを見るとVectorDrawableCompat、内部要素を名前で公開する唯一のメソッドは、 のgetTargetByName内部プライベートステート クラスVectorDrawableCompatStateに存在しVectorDrawableCompatます。

これはプライベート パッケージ (デフォルト) であるため、使用できません (リフレクションを使用しない限り)。

于 2016-05-25T09:14:19.857 に答える