SlideShare une entreprise Scribd logo
1  sur  24
Flex 4 Skinning


史偉龍 Ticore Shih
http://ticore.blogspot.com/
Flex 4 與 Flex 3 App MXML
Flex 3 MX Application:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
</mx:Application>


Flex 4 Spark Application:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
       xmlns:s="library://ns.adobe.com/flex/spark"
       xmlns:mx="library://ns.adobe.com/flex/mx">
</s:Application>
Flex 4 與 Flex 3 Namespaces
MXML 2006 舊的 MXML 名稱空間
Prefix: mx URI: http://www.adobe.com/2006/mxml

MXML 2009 新的 MXML 純語法名稱空間,不含任何組件標籤
Prefix: fx URI: http://ns.adobe.com/mxml/2009

Spark        所有 Spark 組件名稱空間
Prefix: s    URI: library://ns.adobe.com/flex/spark

MX           所有 MX 組件名稱空間
Prefix: mx   URI: library://ns.adobe.com/flex/mx
Spark 與 MX 組件對應關係
• 大部分組件都能找到 Spark 對應版本
   Button, CheckBox, NumericStepper, …


• 容器組件可以用 Spark 組件 + Layout 組合出來
   Canvas = Group + BasicLayout
   TileList = List + TileLayout


• 找不到 Spark 對應組件時才延用 MX 組件
   Tree, ViewStack, TileWindow, Grid, …
Spark 與 MX 組件結構
MX (Halo)                   Spark
               Behavior
               Logic       Component
               Data

UI Component
               Graphics      CSS
               Layout
               States
               Animation     Skin
               Parts
Graphics

         AS3 Programmatic
         Embed SWF
Flex 3   Embed Image
         Library SWC        Flex 4
         FXG Graphic
         MXML Graphic
FXG 與 MXMLG 定義

• 圖形與基本文字

• 填色, 描邊, 漸層與點陣圖

• 支援 Filters, Mask, Alpha, Transform
  與 Blend Modes
FXG 與 MXMLG 差異

                 FXG                              MXMLG

        編譯格式 SWF Binary                           AS3 Bytecode
           效能 比較好                                 比較差

動態性、資料繫結 無                                        有

     Namespace http://ns.adobe.com/fxg/2008 無

                 Flash, Illustrator, Fireworks,
         交換性                                      Flex
                 Flex, Flash Catalyst, …

        外層容器 Spark or MX                          Spark
is DisplayObject? 是                               否
Spark 文字架構

           Spark Text
Label, RichText, RichEditableText

 TLF - Text Layout Framework
      (flash.text.engine.*)

    FTE - Flash Text Engine
     (flashx.textLayout.*)
Spark 文字分類
• Label
  最輕量 FTE 文字類別,類似 MX Label,沒有互動功能

• RichText
  中量文字類別,類似 MX Text,可以表現豐富格式化文字、段
  落,也無法互動

• RichEditableText
  重量文字類別,類似 MX TextArea,支援捲動、選擇、編輯等
  互動功能
Spark 文字功能
• 互動:
 複製、剪下、貼上、復原、超連結、鍵盤滑鼠事件

• 豐富的文字排版控制:
 多欄文字、跨欄文字、雙向文字、垂直文字、TCY 文字、圖文並排、
 字距、連字、大小寫、Digit Case、Digit Width

• 文字影像處理:
 Transform, Mask, Blend Modes
Spark Layout 基本語法
• Layout 與 Container 分離

  <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
      layout="vertical">
  </mx:Application>

  <s:Application xmlns:s="library://ns.adobe.com/flex/spark">
       <s:layout>
               <s:VerticalLayout paddingLeft="10" />
       </s:layout>
       <s:Button top="100" />
  </s:Application>
Spark Layout 種類
• 四種內建排版類別:
  –   BasicLayout
  –   VerticalLayout
  –   HorizontalLayout
  –   TileLayout



• 自訂 Layout:
  – 繼承 spark.layouts.supportClasses.LayoutBase
  – 複寫 measure(), updateDisplayList() 方法
MX 與 Spark 等價容器
 MX component       Spark equivalent
         Canvas     Group + BasicLayout
           HBox     Group + HorizontalLayout, or HGroup

           VBox     Group + VerticalLayout, or VGroup
             Tile   Group + TileLayout, or TileGroup
             List   List + VerticalLayout
         TileList   List + TileLayout
   HorizontalList   List + HorizontalLayout


• Spark Container Scrolling : Container + Scroller
Spark 容器混搭組合

• Spark Container + MX Control

• MX Container + Spark Control

• MX Navigator Container + Spark NavigatorContent
  – Accordion, TabNavigator, ViewStack

• MX Control + Spark ItemRenderer
Enhanced States Syntax
• 定義 States
     <s:State name="default"/>

• 改變目前 State
     currentState="newState"

• 定義 State 的屬性、樣式、事件
     propertyOrStyleName.stateName="..."

• 添加或是移除某個 State 下的組件
     <s:Button includeIn="stateName"/>

• 定義 State 群組
     <s:State name="stateName" stateGroups="groupName"/>
Enhanced States Syntax
• 清除 inline 設定的屬性
    color.stateName="@Clear()"

• 重新加入組件到不同容器
    <fx:Reparent target="target" includeIn="stateName">

• 控制 State 組件創建時機
    itemCreationPolicy="immediate" | "deffered"

• 控制 State 組件快取方式
    itemDestructionPolicy="auto" | "never"

• State 相關事件
    State: enterState, exitState
    UIComponent: currentStateChanging, currentStateChange
Spark Effects
• Property Effects
       Animate, Fade, Resize, AnimateColor

• Transform Effects
       Move, Rotate, Scale

• 3D Effects
       Move3D, Rotate3D, Scale3D

• Pixel-Shader Effects
       CrossFade, Wipe

• Filter Effects
       DropShadowFilter, GlowFilter, BlurFilter, …
CSS Namespaces
<fx:Style>
     @namespace s "library://ns.adobe.com/flex/spark";
     @namespace mx "library://ns.adobe.com/flex/mx";
     @namespace ti "com.ticore.component.*";

     s|Button {
             color: #FF0000;
     }
     mx|Button {
             color: #0000FF;
     }
</fx:Style>
Advanced CSS

• ID Selector           s|Button#btn { fontSize: 16; }


• Descendant Selector   s|Group s|Button { fontSize: 16; }


• Pseudo Selector       s|Button:over { fontSize: 16; }


• Style Name Selector   s|Button.btnStyle { fontSize: 16; }


• Multiple Style Name   styleName="style1 style2"
Spark Skin Class
• 設定 Skin Class 的方式
  @namespace s "library://ns.adobe.com/flex/spark";
  s|Button {
     skinClass: ClassReference("MyButtonSkin");
  }


  <s:Button label="Button" skinClass="MyButtonSkin" />


  myButton.setStyle("skinClass", Class(MyButtonSkin));
內建的 MXML Skin
• MX Components
  – 繼承 mx.skins.spark.SparkSkinForHalo
  – mx.skins.spark.*
  – 路徑 Adobe Flash Builder 4sdks4.1.0
    frameworksprojectssparkskinssrcmxskinsspark


• Spark Components
  – 繼承 spark.skins.SparkSkin
  – spark.skins.spark.*

  – 路徑 Adobe Flash Builder 4sdks4.1.0
    frameworksprojectssparksrcsparkskinsspark
Spark Skinning 契約
             Skin Class                   Host Component

     Host <fx:Metadata>                   n/a
component    [HostComponent(“xx.Button")]
             </fx:Metadata>

Skin states <s:states>                    [SkinState("up")];
                 <s:State name="up"/>     public class Button { ... }
             </s:states>

 Skin parts <s:Button id="upButton"/>     [SkinPart(required="false")]
                                          public var upButton:Button;

      Data text="{hostComponent.title}"   [Bindable]
                                          public var title:String;
Spark MXML Skin 結構
– Root Tag

– Host Component

– Skin States

– Skin Parts

– Layout

– Subcomponents

– Script Block

Contenu connexe

Similaire à Flex 4 Skinning

Flex 使用經驗談
Flex 使用經驗談Flex 使用經驗談
Flex 使用經驗談Ticore Shih
 
Axure RP Prototyping Tool
Axure RP Prototyping ToolAxure RP Prototyping Tool
Axure RP Prototyping ToolSouyi Yang
 
Lotus domino开发教程
Lotus domino开发教程Lotus domino开发教程
Lotus domino开发教程dyzm_2000
 
前端基础知识回顾
前端基础知识回顾前端基础知识回顾
前端基础知识回顾Wu tianhao
 
Html&css培训 舒克
Html&css培训 舒克Html&css培训 舒克
Html&css培训 舒克jay li
 
Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)ziggear
 
理解 Flex item_renderer
理解 Flex item_renderer理解 Flex item_renderer
理解 Flex item_renderer鹏飞 马
 
Web前端标准在各浏览器中的实现差异
Web前端标准在各浏览器中的实现差异Web前端标准在各浏览器中的实现差异
Web前端标准在各浏览器中的实现差异cleverpig
 
JavaScript 脚本控件(二)
JavaScript 脚本控件(二)JavaScript 脚本控件(二)
JavaScript 脚本控件(二)RANK LIU
 
2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0Anthony Chen
 
编辑器设计2
编辑器设计2编辑器设计2
编辑器设计2yiming he
 
网易相册前端页面开发规范2010版
网易相册前端页面开发规范2010版网易相册前端页面开发规范2010版
网易相册前端页面开发规范2010版昌里大金猪 Luke
 
编辑器设计Kissy editor
编辑器设计Kissy editor编辑器设计Kissy editor
编辑器设计Kissy editortaobao.com
 
CKAN 技術介紹 (開發篇)
CKAN 技術介紹 (開發篇)CKAN 技術介紹 (開發篇)
CKAN 技術介紹 (開發篇)Chengjen Lee
 
Somthing You Must Know About XAML
Somthing You Must Know About XAMLSomthing You Must Know About XAML
Somthing You Must Know About XAMLElvisQin
 
Inside the-browser
Inside the-browserInside the-browser
Inside the-browserjy03845581
 
Inside the-browser
Inside the-browserInside the-browser
Inside the-browserjy03845581
 
Exam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development FundamentalsExam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development FundamentalsChieh Lin
 
Html5和css3入门
Html5和css3入门Html5和css3入门
Html5和css3入门Xiujun Ma
 
Script with engine
Script with engineScript with engine
Script with engineWebrebuild
 

Similaire à Flex 4 Skinning (20)

Flex 使用經驗談
Flex 使用經驗談Flex 使用經驗談
Flex 使用經驗談
 
Axure RP Prototyping Tool
Axure RP Prototyping ToolAxure RP Prototyping Tool
Axure RP Prototyping Tool
 
Lotus domino开发教程
Lotus domino开发教程Lotus domino开发教程
Lotus domino开发教程
 
前端基础知识回顾
前端基础知识回顾前端基础知识回顾
前端基础知识回顾
 
Html&css培训 舒克
Html&css培训 舒克Html&css培训 舒克
Html&css培训 舒克
 
Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)
 
理解 Flex item_renderer
理解 Flex item_renderer理解 Flex item_renderer
理解 Flex item_renderer
 
Web前端标准在各浏览器中的实现差异
Web前端标准在各浏览器中的实现差异Web前端标准在各浏览器中的实现差异
Web前端标准在各浏览器中的实现差异
 
JavaScript 脚本控件(二)
JavaScript 脚本控件(二)JavaScript 脚本控件(二)
JavaScript 脚本控件(二)
 
2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0
 
编辑器设计2
编辑器设计2编辑器设计2
编辑器设计2
 
网易相册前端页面开发规范2010版
网易相册前端页面开发规范2010版网易相册前端页面开发规范2010版
网易相册前端页面开发规范2010版
 
编辑器设计Kissy editor
编辑器设计Kissy editor编辑器设计Kissy editor
编辑器设计Kissy editor
 
CKAN 技術介紹 (開發篇)
CKAN 技術介紹 (開發篇)CKAN 技術介紹 (開發篇)
CKAN 技術介紹 (開發篇)
 
Somthing You Must Know About XAML
Somthing You Must Know About XAMLSomthing You Must Know About XAML
Somthing You Must Know About XAML
 
Inside the-browser
Inside the-browserInside the-browser
Inside the-browser
 
Inside the-browser
Inside the-browserInside the-browser
Inside the-browser
 
Exam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development FundamentalsExam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development Fundamentals
 
Html5和css3入门
Html5和css3入门Html5和css3入门
Html5和css3入门
 
Script with engine
Script with engineScript with engine
Script with engine
 

Flex 4 Skinning

  • 1. Flex 4 Skinning 史偉龍 Ticore Shih http://ticore.blogspot.com/
  • 2. Flex 4 與 Flex 3 App MXML Flex 3 MX Application: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> </mx:Application> Flex 4 Spark Application: <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"> </s:Application>
  • 3. Flex 4 與 Flex 3 Namespaces MXML 2006 舊的 MXML 名稱空間 Prefix: mx URI: http://www.adobe.com/2006/mxml MXML 2009 新的 MXML 純語法名稱空間,不含任何組件標籤 Prefix: fx URI: http://ns.adobe.com/mxml/2009 Spark 所有 Spark 組件名稱空間 Prefix: s URI: library://ns.adobe.com/flex/spark MX 所有 MX 組件名稱空間 Prefix: mx URI: library://ns.adobe.com/flex/mx
  • 4. Spark 與 MX 組件對應關係 • 大部分組件都能找到 Spark 對應版本 Button, CheckBox, NumericStepper, … • 容器組件可以用 Spark 組件 + Layout 組合出來 Canvas = Group + BasicLayout TileList = List + TileLayout • 找不到 Spark 對應組件時才延用 MX 組件 Tree, ViewStack, TileWindow, Grid, …
  • 5. Spark 與 MX 組件結構 MX (Halo) Spark Behavior Logic Component Data UI Component Graphics CSS Layout States Animation Skin Parts
  • 6. Graphics AS3 Programmatic Embed SWF Flex 3 Embed Image Library SWC Flex 4 FXG Graphic MXML Graphic
  • 7. FXG 與 MXMLG 定義 • 圖形與基本文字 • 填色, 描邊, 漸層與點陣圖 • 支援 Filters, Mask, Alpha, Transform 與 Blend Modes
  • 8. FXG 與 MXMLG 差異 FXG MXMLG 編譯格式 SWF Binary AS3 Bytecode 效能 比較好 比較差 動態性、資料繫結 無 有 Namespace http://ns.adobe.com/fxg/2008 無 Flash, Illustrator, Fireworks, 交換性 Flex Flex, Flash Catalyst, … 外層容器 Spark or MX Spark is DisplayObject? 是 否
  • 9. Spark 文字架構 Spark Text Label, RichText, RichEditableText TLF - Text Layout Framework (flash.text.engine.*) FTE - Flash Text Engine (flashx.textLayout.*)
  • 10. Spark 文字分類 • Label 最輕量 FTE 文字類別,類似 MX Label,沒有互動功能 • RichText 中量文字類別,類似 MX Text,可以表現豐富格式化文字、段 落,也無法互動 • RichEditableText 重量文字類別,類似 MX TextArea,支援捲動、選擇、編輯等 互動功能
  • 11. Spark 文字功能 • 互動: 複製、剪下、貼上、復原、超連結、鍵盤滑鼠事件 • 豐富的文字排版控制: 多欄文字、跨欄文字、雙向文字、垂直文字、TCY 文字、圖文並排、 字距、連字、大小寫、Digit Case、Digit Width • 文字影像處理: Transform, Mask, Blend Modes
  • 12. Spark Layout 基本語法 • Layout 與 Container 分離 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"> </mx:Application> <s:Application xmlns:s="library://ns.adobe.com/flex/spark"> <s:layout> <s:VerticalLayout paddingLeft="10" /> </s:layout> <s:Button top="100" /> </s:Application>
  • 13. Spark Layout 種類 • 四種內建排版類別: – BasicLayout – VerticalLayout – HorizontalLayout – TileLayout • 自訂 Layout: – 繼承 spark.layouts.supportClasses.LayoutBase – 複寫 measure(), updateDisplayList() 方法
  • 14. MX 與 Spark 等價容器 MX component Spark equivalent Canvas Group + BasicLayout HBox Group + HorizontalLayout, or HGroup VBox Group + VerticalLayout, or VGroup Tile Group + TileLayout, or TileGroup List List + VerticalLayout TileList List + TileLayout HorizontalList List + HorizontalLayout • Spark Container Scrolling : Container + Scroller
  • 15. Spark 容器混搭組合 • Spark Container + MX Control • MX Container + Spark Control • MX Navigator Container + Spark NavigatorContent – Accordion, TabNavigator, ViewStack • MX Control + Spark ItemRenderer
  • 16. Enhanced States Syntax • 定義 States <s:State name="default"/> • 改變目前 State currentState="newState" • 定義 State 的屬性、樣式、事件 propertyOrStyleName.stateName="..." • 添加或是移除某個 State 下的組件 <s:Button includeIn="stateName"/> • 定義 State 群組 <s:State name="stateName" stateGroups="groupName"/>
  • 17. Enhanced States Syntax • 清除 inline 設定的屬性 color.stateName="@Clear()" • 重新加入組件到不同容器 <fx:Reparent target="target" includeIn="stateName"> • 控制 State 組件創建時機 itemCreationPolicy="immediate" | "deffered" • 控制 State 組件快取方式 itemDestructionPolicy="auto" | "never" • State 相關事件 State: enterState, exitState UIComponent: currentStateChanging, currentStateChange
  • 18. Spark Effects • Property Effects Animate, Fade, Resize, AnimateColor • Transform Effects Move, Rotate, Scale • 3D Effects Move3D, Rotate3D, Scale3D • Pixel-Shader Effects CrossFade, Wipe • Filter Effects DropShadowFilter, GlowFilter, BlurFilter, …
  • 19. CSS Namespaces <fx:Style> @namespace s "library://ns.adobe.com/flex/spark"; @namespace mx "library://ns.adobe.com/flex/mx"; @namespace ti "com.ticore.component.*"; s|Button { color: #FF0000; } mx|Button { color: #0000FF; } </fx:Style>
  • 20. Advanced CSS • ID Selector s|Button#btn { fontSize: 16; } • Descendant Selector s|Group s|Button { fontSize: 16; } • Pseudo Selector s|Button:over { fontSize: 16; } • Style Name Selector s|Button.btnStyle { fontSize: 16; } • Multiple Style Name styleName="style1 style2"
  • 21. Spark Skin Class • 設定 Skin Class 的方式 @namespace s "library://ns.adobe.com/flex/spark"; s|Button { skinClass: ClassReference("MyButtonSkin"); } <s:Button label="Button" skinClass="MyButtonSkin" /> myButton.setStyle("skinClass", Class(MyButtonSkin));
  • 22. 內建的 MXML Skin • MX Components – 繼承 mx.skins.spark.SparkSkinForHalo – mx.skins.spark.* – 路徑 Adobe Flash Builder 4sdks4.1.0 frameworksprojectssparkskinssrcmxskinsspark • Spark Components – 繼承 spark.skins.SparkSkin – spark.skins.spark.* – 路徑 Adobe Flash Builder 4sdks4.1.0 frameworksprojectssparksrcsparkskinsspark
  • 23. Spark Skinning 契約 Skin Class Host Component Host <fx:Metadata> n/a component [HostComponent(“xx.Button")] </fx:Metadata> Skin states <s:states> [SkinState("up")]; <s:State name="up"/> public class Button { ... } </s:states> Skin parts <s:Button id="upButton"/> [SkinPart(required="false")] public var upButton:Button; Data text="{hostComponent.title}" [Bindable] public var title:String;
  • 24. Spark MXML Skin 結構 – Root Tag – Host Component – Skin States – Skin Parts – Layout – Subcomponents – Script Block