2013-07-08 1 views
2

Prenez le code suivant pour une classe trapézoïdal dans Flex 4:Pourquoi cet élément de contour n'apparaît-il pas tout autour de ce trapèze dans Flex 4?

<?xml version="1.0" encoding="utf-8"?> 
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" width="35" height="140"> 
    <s:Path data="m 0 34 
      l 35 -34 
      v 140 
      l -35 -34"> 
     <s:stroke> 
      <s:SolidColorStroke weight="1" color="0x000000"/> 
     </s:stroke> 
     <s:fill> 
      <s:SolidColor color="0xCCCCCC"/> 
     </s:fill> 
    </s:Path> 
</s:Group> 

Ce produit l'image suivante:

enter image description here

je peux voir l'élément de course autour des bords en diagonale sur le dessus et en bas, mais pas le long des bords verticaux à gauche et à droite. Désolé, je suis très nouveau à faire des formes personnalisées comme ça dans Flex. Qu'est-ce qui fait la différence ici? Merci!

EDIT:

Je n'ai pas eu le temps de se pencher sur l'un des commentaires. Cependant, quelques expériences que je suis à court:

1: Modification des données à:

"m 1 34 
l 33 -34 
v 140 
l -33 -34" 

produit ce résultat:

enter image description here

2: Modification des données à:

"m 1 34 
l 33 -34 
v 140 
l -20 -34" 

a donné ce résultat:

enter image description here

Dans chacun de ces deux cas, le bord droit est allé de l'avant et a montré, mais la gauche on n'a pas.

EDIT:

Il peut être utile de mentionner que même dans l'onglet Designer de Flash Builder 4.6, le bord gauche est manquant.

+0

J'ai copié/collé votre code et je vois le coup où il devrait être. On dirait que quelque chose en dehors de votre forme recouvre ou écrase. – RIAstar

Répondre

3

En supposant que le groupe de conteneurs écrase son contenu, la réponse @Kodiaks est partiellement correcte. Cependant, la raison pour laquelle la largeur devrait être de 36 n'est pas ce qu'il décrit, mais le fait que vous devez tenir compte de la largeur du trait.
Le trait est dessiné avec son centre sur la bordure réelle de la forme, de sorte qu'une bordure 1px serait dessinée 0,5px à l'intérieur de la forme et 0,5px à l'extérieur. Dans ce cas particulier, la largeur devient ainsi 36px (35 + 2 * 0,5).
Vous pouvez vérifier que c'est la raison réelle en réglant le poids de la bordure à, par ex. 4px; vous verrez que vous aurez besoin d'un conteneur 39px si vous ne voulez pas le découper.

En outre, si vous ne voulez pas que le trait soit coupé sur le côté gauche, vous devrez dessiner la forme un peu plus vers la droite (la moitié du poids du trait pour être exact).

Et puis il y a encore une petite erreur: vous n'avez pas fermé la forme, ce qui a empêché de tracer la bordure gauche. Il suffit d'ajouter un Z à la fin du data et la forme sera fermée.

Voici donc le résultat final pour une forme avec le poids de la frontière « 4 »:

<s:Group width="39" height="140"> 
    <s:Path data="m 2 34 
     l 35 -32 
     v 140 
     l -35 -34 z"> 
     <s:stroke> 
      <s:SolidColorStroke weight="4" color="0x000000" /> 
     </s:stroke> 
     <s:fill> 
      <s:SolidColor color="0xCCCCCC"/> 
     </s:fill> 
    </s:Path> 
</s:Group> 

Note: comme vous pouvez le voir, j'ai aussi fait quelques ajustements pour la hauteur; sinon les coins seront également coupés.

+0

Merci. Je pense que le "z" manquant était le problème principal, et je fais une autre tour sur les coordonnées et les lignes. – Panzercrisis

2

Si votre forme commence à 0 et passe à 35, sa largeur n'est pas 35 mais 36, le groupe parent n'est pas assez large pour afficher les traits de bordure.

+0

Tant que "clipAndEnableScrolling" du groupe parent n'est pas défini sur "true", les traits seront toujours affichés. – RIAstar

+0

Oui mais nous ne savons pas ce qui est en haut, et avoir un bouton plus petit que son contenu n'est pas une bonne pratique. – Kodiak

+0

Cette réponse semblait être liée au problème avec le bon côté. – Panzercrisis

Questions connexes