web-dev-qa-db-fra.com

Comment créer une forme avec un solide, un coin, un trait dans Java Code?

J'ai une forme définie dans le fichier xml ci-dessous, maintenant je veux passer à la couleur unie par programmation.

<?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>

Je pense que je devrais avoir une classe qui étend ShapeDrawable et implémente la méthode onDraw. Tout le monde sait comment?

18
srain

Enfin, je l'ai résolu!

// 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

Je préférerais faire de la forme en forme et ajouter du rembourrage à la forme intérieure ...

Comme ça:

<?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>

MISE À JOUR: J'ai trouvé que les coins de la forme intérieure devraient être plus petits pour un meilleur look ... Pour des proportions différentes, vous devrez tester quel rayon intérieur, rayon extérieur et taille de trait (le rembourrage) est le mieux pour votre solution