web-dev-qa-db-ja.com

Javaコードでソリッド、コーナー、ストロークの形状を作成する方法は?

以下のxmlファイルで形状が定義されていますが、プログラムで単色に変更したいと思います。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="rectangle" >

    <solid Android:color="#DFDFE0" />

    <corners
        Android:bottomLeftRadius="8dp"
        Android:bottomRightRadius="8dp"
        Android:topLeftRadius="8dp"
        Android:topRightRadius="8dp" />

    <stroke
        Android:width="3dp"
        Android:color="#2E3135" />

</shape>

ShapeDrawableを拡張し、onDrawメソッドを実装するクラスが必要だと思います。誰でも方法を知っていますか?

18
srain

最後に、私はそれを解決しました!

// prepare
int strokeWidth = 5; // 5px not dp
int roundRadius = 15; // 15px not dp
int strokeColor = Color.parseColor("#2E3135");
int fillColor = Color.parseColor("#DFDFE0");

GradientDrawable Gd = new GradientDrawable();
Gd.setColor(fillColor);
Gd.setCornerRadius(roundRadius);
Gd.setStroke(strokeWidth, strokeColor);
26
srain

私は形を作り、内側の形にパディングを追加したいのですが...

このような:

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item>
        <shape Android:shape="rectangle">
            <solid Android:color="#2E3135" />
            <corners
                Android:bottomLeftRadius="8dp"
                Android:bottomRightRadius="8dp"
                Android:topLeftRadius="8dp"
                Android:topRightRadius="8dp" />
        </shape>
    </item>
    <item
        Android:bottom="3dp"
        Android:left="3dp"
        Android:right="3dp"
        Android:top="3dp">
        <shape Android:shape="rectangle">
            <solid Android:color="#DFDFE0" />
            <corners
                Android:bottomLeftRadius="5dp"
                Android:bottomRightRadius="5dp"
                Android:topLeftRadius="5dp"
                Android:topRightRadius="5dp" />
        </shape>
    </item>
</layer-list>

PDATE:見栄えを良くするには、内側の形状の角を小さくする必要があることがわかりました...異なる比率の場合は、内側の半径、外側の半径、ストロークサイズ(パディング)をテストする必要がありますあなたのソリューションに最適です