`

Flex4强大的Skin——以RadioButton为例

阅读更多

Flex4弱化了css样式的功能,使得复杂界面效果必须通过Skin来完成,Skin几乎能实现所有你希望设计界面显示的效果。

SparkSkin是一个Group类型的容器(继承自Group);全部的mx.spark的可视化控件的外观全部都是SparkSkin的子类;

 

可以用几种方式使用Skin:

(1)在css中直接定义

s|Button{

        skinClass:ClassReference("com.skin.ButtonSkin");

}

(2)在组件定义时设置

<s:Button skinClass="com.skin.ButtonSkin"/>

 

Skin实例详解:

所有skin的修改方式大都相同,根据详细的注释,可以清楚的了解控件的样式实现方法,知道哪些是用来设计边框的,哪些是用来设计填充颜色的,以及哪些是现实文本的颜色。可以通过<s:stroke>来修改边框,<s:fill>来修改填充等。

下面讲解如何通过皮肤将如左图的普通radioButton,设计如右图中的效果。

   

1)首先新建一个MXML Skin类型的文件,组件选择RadioButton.

2)初始生成的文件,为系统默认的皮肤效果。首先你会看到

<s:states>

        <s:State name="up" />

        <s:State name="over" stateGroups="overStates" />

        <s:State name="down" stateGroups="downStates" />

        <s:State name="disabled" stateGroups="disabledStates" />

......

 </s:states>

定义了RadioButton的视图状态,包括鼠标滑过、选中等状态,在皮肤定义里会经常看到例如color.downStates="0xFFFFFF";alpha. over="1"意在定义不同状态时组件呈现的颜色。

3)接着会有一个Group容器,里面放了很多用于效果设计的组件,RadioButton原始皮肤是由很多个Ellipse组件组成的,包括它的边框,阴影,高光等效果。因为效果图的显示效果比原来的效果要大,因此将Group大小由长宽13改为长宽都为14。

首先找到注释为<!-- drop shadow -->的椭圆控件,该内容定义了RadioButton的阴影效果。

默认情况下的阴影效果为:

<!-- drop shadow -->

        <s:Ellipse left="-1" top="-1" right="-1" bottom="-1">

            <s:stroke>

                <s:LinearGradientStroke rotation="90" weight="1">

                    <s:GradientEntry color="0x000000"  color.downStates="0xFFFFFF" alpha="0.011" alpha.downStates="0" />

                    <s:GradientEntry color="0x000000" color.downStates="0xFFFFFF" alpha="0.121" alpha.downStates="0.57" />

                </s:LinearGradientStroke>

            </s:stroke>

    </s:Ellipse>

即边框线性渐变,宽度为1,旋转角度90度,即正中切割一般有阴影,根据效果图,阴影效果在右上,因此旋转角度改为45度;

阴影颜色也不是纯黑色颜色

另外为了增加渐变的效果性,改为四色线性渐变,色彩之间通过透明度不同来实现缓冲效果;

阴影的宽度增加到3增强立体效果。

<!-- drop shadow -->

        <s:Ellipse left="-1" top="-1" right="-1" bottom="-1">

            <s:stroke>

                <s:LinearGradientStroke rotation="45" weight="3">

                  <s:GradientEntry color="0x7ca39b" color.downStates="0xFFFFFF" alpha="0.8" alpha.downStates="0.8" />        

                  <s:GradientEntry color="0x7ca39b" color.downStates="0xFFFFFF" alpha="1" alpha.downStates="1" />

                  <s:GradientEntry color="0xf5f8f7" color.downStates="0xFFFFFF" alpha="0.8" alpha.downStates="0.8" />

                  <s:GradientEntry  color="0xf5f8f7" color.downStates="0xFFFFFF" alpha="1" alpha.downStates="1" />          

                </s:LinearGradientStroke>

            </s:stroke>

      </s:Ellipse>

再看边框,比较原图和效果图会发现,效果图没有边框,只靠阴影形成来形成圆形形状,因此找到注释为<!—border的组件,将其删掉,或者设置alpha值为0,使其不显示边框。

 

选中点:dot

找到注释为<!-- dot -->的组件,可以发现,中心选中点,是一个由path绘制而成的原点,填充而成的,现在需要加大这个原点。

path指令很难记的,绘制了半天最终偶放弃了,用了一个简单的Ellipse绘制而成的。

但是注意:可以用其他组件代替已有组件,但是id="dotFill"的定义要仍然保留给新定义组件的填充器,否则报错,代码如下。

<s:Ellipse right="3" bottom="3" left="3" top="3" includeIn = "selectedStates" id="dot" itemCreationPolicy="immediate">

           <s:fill>

              <s:SolidColor id="dotFill" color="#e67f25" />

           </s:fill>

    </s:Ellipse>

4)使用已定义的皮肤。

.chartRadioButton{

        skinClass:ClassReference("com.skin.radioButtonSkin");

        symbolColor:#1cb49b;

}

效果:

.levelRadioButton{

        skinClass:ClassReference("com.skin.radioButtonSkin");

        symbolColor:#e67f25;

}

效果:

使用同一个Skin,设置了不同的symbolColor(元件的颜色),使得选中效果有不同展示效果。

分享到:
评论

相关推荐

    安卓Android源码——(RadioButton与监听).zip

    这个压缩包文件"安卓Android源码——(RadioButton与监听).zip"很可能包含了关于如何在Android应用中使用RadioButton以及如何实现点击事件监听的相关示例代码。 RadioButton是Android SDK中的android.widget....

    安卓Android源码——(RadioButton与监听).rar

    本资源“安卓Android源码——(RadioButton与监听).rar”包含了一个关于RadioButton及其监听事件的实践案例,通过这个例子,我们可以深入理解RadioButton的工作原理和事件处理机制。 RadioButton的基础使用: ...

    Flex DataGird Add RadioButton

    4. **设置事件监听器**:在RadioButton上设置一个事件监听器,如`change`事件,当用户点击RadioButton时触发,更新数据源以反映用户的选择。 5. **应用自定义渲染器**:将这个自定义渲染器应用到DataGrid的相应列上...

    Android2.2 r1 API 中文文档系列(11) —— RadioButton

    ### Android2.2 r1 API 中文文档系列(11) —— RadioButton #### 概述 本章节主要介绍Android2.2 r1版本中关于`RadioButton`组件的相关知识点。`RadioButton`是一种特殊的按钮控件,它具有两种状态:选中和未...

    Android2.2 r1 API中文文档——RadioButton(完成).doc

    Android2.2 r1 API中文文档——RadioButton(完成).doc

    IOS应用源码——RadioButton for iOS.rar

    5. 协作与组选择:在多选一的场景下,RadioButton通常会以组的形式出现。我们可以创建一个RadioButtonGroup类来管理一组RadioButton,确保每次只有一个被选中。这可能涉及一个数组来存储所有RadioButton实例,并在...

    安卓Andriod源码——动态添加RadioGroup的RadioButton.zip

    4. **设置RadioButton属性**: 可以设置RadioButton的各种属性,如文字、颜色、大小等,以满足界面设计需求。 5. **添加RadioButton到RadioGroup**: 添加RadioButton到RadioGroup,使用`addView()`方法: ```java ...

    Flex4 DataGrid中嵌入RadioButton实现思路及代码

    在使用Flex 4技术开发数据展示界面时,常常需要在DataGrid组件中嵌入RadioButton,以便用户可以在多个选项之间做选择。本节内容重点讲解了如何在Flex4的DataGrid中嵌入RadioButton,并提供了相应的实现思路和代码。 ...

    Flex4 DataGrid中如何嵌入RadioButton

    总的来说,通过创建自定义的ItemRenderer并在其中添加RadioButton,我们可以实现在Flex4 DataGrid中嵌入单选按钮的功能,使用户能够方便地选择一行数据。同时,需要注意的是,必须正确处理RadioButton的状态同步和...

    安卓Android源码——动态添加RadioGroup的RadioButton.zip

    在安卓开发中,有时我们需要根据需求动态地在界面上添加组件,例如在RadioGroup中添加RadioButton。本示例代码着重讲解如何在Android应用中实现这一功能。RadioGroup是一种布局容器,用于管理一组RadioButton,使得...

    RadioButton Embed In The DataGrid Of Flex

    在Flex开发中,有时我们需要在DataGrid组件中嵌入单选按钮(RadioButton)来实现用户只能选择一行数据的功能。在给定的标题和描述中,我们看到如何在Flex的DataGrid中实现这一功能。以下是对这个话题的详细解释: ...

    ios的自动以RadioButton

    4. **UIStackView**:UIStackView是一种方便的布局工具,它可以将多个视图水平或垂直堆叠,自动处理间距和对齐,对于创建RadioButton组特别有用。 5. **Tag与Target-Action**:为每个RadioButton分配唯一的tag,...

    C# WinForm 自定义 RadioButton

    在C# WinForm应用开发中,自定义RadioButton控件是一种常见的需求,这通常涉及到扩展.NET Framework提供的默认RadioButton控件的功能,以满足特定的设计或交互需求。本教程将深入讲解如何在Visual Studio 2005及其更...

    android 自定义RadioButton的样式

    1. **创建Drawable资源**:首先需要为RadioButton创建一个Drawable资源文件,通常是一个XML文件,用来定义不同状态下的背景样式。 2. **设置RadioButton的背景**:通过设置`android:background`属性来引用第一步创建...

    菜单radiobutton_viewpage

    4. 关联RadioButton与ViewPager:在RadioGroup的监听器中,根据选中的RadioButton更新ViewPager的当前页面。可以使用ViewPager的setCurrentItem(int item)方法,其中item参数对应于RadioButton的tag。 5. 可选:...

    wpf radiobutton模版设计成button样式

    1. **创建新模板**:在XAML文件中,为RadioButton定义一个新的ControlTemplate。例如: ```xml &lt;RadioButton&gt; &lt;RadioButton.Template&gt; &lt;ControlTemplate TargetType="RadioButton"&gt; &lt;!-- 新的模板内容将放在这里...

    android 自定义单选按钮radioButton

    RadioButton是Android的 android.widget.RadioGroup 类中的一个子类,它在视觉上表现为一个小圆圈,未被选中时为空,被选中时填充。RadioGroup用于管理多个RadioButton,确保同一时间只有一个RadioButton被选中。 ...

    c# WPF 上图下文字radiobutton样式,且可动态生成radiobutton,搭配触摸滚动条

    在C#代码中,我们可以使用循环遍历数据源,并为每个项目创建一个新的RadioButton。数据源可以是ObservableCollection或其他类型,只要它可以绑定到控件并触发视图的更新。例如: ```csharp foreach (var item in ...

    RadioButton实现选择后可取消选择

    这可以通过添加一个新的RadioButton或一个Button,并在点击时将所有RadioButton的IsSelected属性设置为false来实现。 在提供的DemoForRadioBtn压缩包文件中,可能包含了实现这一功能的完整代码示例,包括XAML布局和...

Global site tag (gtag.js) - Google Analytics