Je veux dessiner une forme personnalisée comme celle-ci-.
Une option consiste à créer chaque forme dans Photoshop individuellement, puis à l'utiliser dans le codage, mais je veux savoir s'il est possible de dessiner cela en utilisant XML.
Comment dessiner la forme comme ça? Ne vous attendez pas à un code complet, donnez-moi simplement une idée ou dirigez-moi dans la bonne direction.
Essayez le format XML dessinable suivant:
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<!-- Colored rectangle-->
<item>
<shape Android:shape="rectangle">
<size
Android:width="100dp"
Android:height="40dp" />
<solid Android:color="#FAD55C" />
</shape>
</item>
<!-- This rectangle for the left side -->
<!-- Its color should be the same as layout's -->
<item
Android:right="90dp"
Android:left="-30dp">
<rotate
Android:fromDegrees="45">
<shape Android:shape="rectangle">
<solid Android:color="#ffffff" />
</shape>
</rotate>
</item>
<!-- These rectangles for the right side -->
<!-- Their color should be the same as layout's -->
<item
Android:top="-40dp"
Android:bottom="63dp"
Android:right="-25dp">
<rotate
Android:fromDegrees="45">
<shape Android:shape="rectangle">
<solid Android:color="#ffffff" />
</shape>
</rotate>
</item>
<item
Android:top="63dp"
Android:bottom="-40dp"
Android:right="-25dp">
<rotate
Android:fromDegrees="-45">
<shape Android:shape="rectangle">
<solid Android:color="#ffffff" />
</shape>
</rotate>
</item>
</layer-list>
Voilà à quoi ça ressemble sur un fond blanc:
Voici plus d'informations sur Shape Drawables .
MODIFIER:
Ce qui suit est une petite explication de la façon dont cela est fait.
top, bottom, right and left
les attributs de la balise de forme size
signifie la distance entre les bords de la forme et top, bottom, right and left
bords du conteneur (rectangle jaune).Par exemple, si nous voulons placer un petit rectangle à l'intérieur du jaune avec un 10dp
espace de chaque bord du rectangle jaune, nous avons défini le top, bottom, right and left
attributs égaux à 10dp
pour le nouveau rectangle (intérieur).
size
peuvent être négatives, ce qui signifie que le bord correspondant de la forme apparaît en dehors du conteneur. Dans l'exemple précédent, si vous définissez, par exemple, l'attribut left
sur 100 dp ou plus, le rectangle intérieur ne s'affichera pas, car il sera derrière le pensionnaire droit du jaune.En ce qui concerne la rotation, elle va dans le sens horaire pour les valeurs positives et dans le sens antihoraire sinon.
J'espère que cela ne vous a pas dérouté.