2012-04-09 20 views
0

Ich habe die Adobe-docs Using FXG und Embedding application assets lesen, kann aber einbetten nur die FXG durch MXML -Mit FXG Grafik in einer Flex mobile app arbeitet mit MXML, aber nicht mit Actionscript

enter image description here

MyStars. mxml:

<?xml version="1.0" encoding="utf-8"?> 
<s:ViewNavigatorApplication 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    firstView="views.Home"> 
</s:ViewNavigatorApplication> 

Home.mxml (funktioniert in Ordnung, wenn die Einbettung FXG durch MXML):

<?xml version="1.0" encoding="utf-8"?> 
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:comps="assets.*" 
     title="Home"> 

    <comps:Star /> 
</s:View> 

Star.fxg (in src/assets/Star.fxg befindet):

<?xml version='1.0' encoding='UTF-8'?> 
<fxg:Graphic xmlns:fxg="http://ns.adobe.com/fxg/2008" version="2">  
    <fxg:Path x="9.399" y="10.049" data="M 82.016 78.257 L 51.895 69.533 L 27.617 89.351 L 26.621 58.058 L 0.231 41.132 L 29.749 30.52 L 37.714 0.241 L 56.944 24.978 L 88.261 23.181 L 70.631 49.083 Z"> 
     <fxg:fill> 
      <fxg:SolidColor color="#FFFFFF"/> 
     </fxg:fill> 
     <fxg:stroke> 
      <fxg:SolidColorStroke 
       caps="none" 
       color="#4769C4" 
       joints="miter" 
       miterLimit="4" 
       weight="20"/> 
     </fxg:stroke> 
    </fxg:Path> 
</fxg:Graphic> 

Wenn ich jedoch versuchen, die FXG Grafik über Actionscript (noch in der gleichen Flex-Mobilprojekt instansiate), erhalte ich die Compiler-Fehler:

enter image description here

Call to a possibly undefined method Star 

Home.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:comps="assets.*" 
     title="Home"> 

    <fx:Script> 
     <![CDATA[ 
      import spark.core.SpriteVisualElement; 

      private static const STAR:SpriteVisualElement = new Star(); 
     ]]> 
    </fx:Script> 

<s:BitmapImage source="{STAR}" /> 
</s:View> 

Ich habe Import Comps auch versucht; und/oder neue comps.Star();

Wenn ich die FXG-Datei src/ und verwenden Xmlns bewegen: comps = "*" alles funktioniert.

Antwort

1

Import Stern in Actionscript, die auf Ihrem Code basiert Ich gehe davon wird so etwas wie dieses:

import assets.Star 
private static const STAR:SpriteVisualElement = new Star(); 

Ich vermute, dass wird der Compiler-Fehler loszuwerden. Ich bin mir jedoch nicht sicher, ob Sie ein SpriteVisualElement als Quelle für ein BitmapImage verwenden können. Möglicherweise müssen Sie SpriteVisualElement als untergeordnetes Element des übergeordneten Containers hinzufügen und dazu den Flex Component-Lebenszyklus verwenden.

Ich habe ein wenig experimentiert um diese und nur contributed this code to Apache Flex. The specific class is here. Obwohl ich aus irgendeinem Grund übersehen habe, dass FXG-Elemente SpriteVisualElements sein könnten. Die Verwendung der FXGImage-Klasse entbindet Sie nicht von der Verantwortung, die Komponente in ActionScript zu skalieren und zu positionieren, wenn Sie sie in ActionScript erstellen.

+0

"importieren Vermögenswerte.Star;" funktioniert gut, danke. Image und BitmapImage können es auch als * source = * verwenden. Leider funktionieren sie schlecht, wenn ich * width * und * height * einstelle, die Skalierung der FXG-Datei funktioniert aus irgendeinem Grund nicht gut. –

+1

@AlexanderFarber Ist das Problem, dass das Bild nicht skaliert? Oder besteht das Problem, dass das Seitenverhältnis nicht beibehalten wird? Hier ist ein Beispiel meiner FXGImage Komponente: http://www.flextras.com/labs/FlextrasFridayLunch/2012/FXGImage/FXGImageSample.html. Sie können die Höhe und Breite ohne Problem ändern. – JeffryHouser

+0

Gut, Ihre FXGImage-Komponente sieht viel besser aus. Das Bild und BitmapImage skalieren, aber es sieht schlecht aus. Zum Beispiel, wenn ich diesen Code in der obigen App verwende: \t

1

Für FXG-Grafik, achten Sie auf Ihre Grafikgröße. Wenn Sie ein Objekt mit FXG erstellen, wird der weiße Bereich um das Symbol gezählt. Stellen Sie sicher, dass Sie die Grafikgröße auf die Größe Ihres Symbols einstellen (kein zusätzlicher Leerraum um das Symbol). Auf diese Weise sieht das FXG-Asset viel besser aus, wenn Sie in BitmapImage einbetten.