web-dev-qa-db-ja.com

Android:プログラムで描画可能なベクターのストロークの色を設定する方法

AndroidのVectorDrawableで問題が発生しています。ベクトル描画可能ファイル(.xml)があり、ビットマップに描画したいと思います。このファイルをロードしてビットマップに描画することができました。塗りつぶしの色は変更できますが、ストロークと色を変更できないという問題があります。

どんな助けもいただければ幸いです!!!

ありがとうございました!

ドローアブルファイルは次のとおりです。

<vector xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:width="312dp"
    Android:height="312dp"
    Android:viewportWidth="312.7"
    Android:viewportHeight="312.699">
<path
    Android:pathData="M306.35,266.34c0,22.09 -17.91,40.01 -40,40.01L46.35,306.35c-22.09,0 -40,-17.92 -40,-40.01v-219.99c0,-22.11 17.92,-40 40,-40h220c22.09,0 40,17.9 40,40L306.35,266.34z"
    Android:strokeWidth="5"
    Android:fillColor="@color/transparent"
    Android:strokeColor="#231F20"/></vector>

図形を読み込んで青色で塗りつぶす方法は次のとおりです。

Drawable drawable = getResources().getDrawable(R.drawable.graph_rounded_rectangle);
        drawable.setBounds(0, 0, width, height);
        drawable.setColorFilter(new PorterDuffColorFilter(getResources().getColor(R.color.blue), PorterDuff.Mode.MULTIPLY));
        drawable.draw(canvas);
9
Thang M. Pham

Chris Banes in his blog で述べられているように、サポートライブラリを使用して次のコードでドローアブルに色を付けることができます。

Drawable drawable = ContextCompat.getDrawable(mContext, R.drawable.ic_asset);

// Wrap the drawable so that future tinting calls work
// on pre-v21 devices. Always use the returned drawable.
drawable = DrawableCompat.wrap(drawable);

// We can now set a tint
DrawableCompat.setTint(drawable, Color.RED);
// ...or a tint list
DrawableCompat.setTintList(drawable, myColorStateList);
// ...and a different tint mode
DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_OVER);

次のように、groupxmlを追加してみてください。

<vector xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:width="312dp"
    Android:height="312dp"
    Android:viewportWidth="312.7"
    Android:viewportHeight="312.699">
    <group Android:scaleX="1.0" Android:scaleY="1.0">
        <path
            Android:pathData="M306.35,266.34c0,22.09 -17.91,40.01 -40,40.01L46.35,306.35c-22.09,0 -40,-17.92 -40,-40.01v-219.99c0,-22.11 17.92,-40 40,-40h220c22.09,0 40,17.9 40,40L306.35,266.34z"
            Android:strokeWidth="5"
            Android:fillColor="@color/transparent"
            Android:strokeColor="#231F20"/>
    </group>
</vector>

参照 ここ

5
Context

これらのベクタープロパティには、Java APIでのみアクセスできます。

Vector : name
Vector : width
Vector : height
Vector : viewportWidth
Vector : viewportHeight
Vector : tint
Vector : tintMode
Vector : autoMirrored
Vector : alpha

Javaコードに到達できません。ドローアブルで処理する必要があります)を使用してベクトル(色、サイズなど)のストロークを設定します。

0
Faakhir