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以及如何实现点击事件监听的相关示例代码。 RadioButton是Android SDK中的android.widget....
本资源“安卓Android源码——(RadioButton与监听).rar”包含了一个关于RadioButton及其监听事件的实践案例,通过这个例子,我们可以深入理解RadioButton的工作原理和事件处理机制。 RadioButton的基础使用: ...
4. **设置事件监听器**:在RadioButton上设置一个事件监听器,如`change`事件,当用户点击RadioButton时触发,更新数据源以反映用户的选择。 5. **应用自定义渲染器**:将这个自定义渲染器应用到DataGrid的相应列上...
### Android2.2 r1 API 中文文档系列(11) —— RadioButton #### 概述 本章节主要介绍Android2.2 r1版本中关于`RadioButton`组件的相关知识点。`RadioButton`是一种特殊的按钮控件,它具有两种状态:选中和未...
Android2.2 r1 API中文文档——RadioButton(完成).doc
5. 协作与组选择:在多选一的场景下,RadioButton通常会以组的形式出现。我们可以创建一个RadioButtonGroup类来管理一组RadioButton,确保每次只有一个被选中。这可能涉及一个数组来存储所有RadioButton实例,并在...
4. **设置RadioButton属性**: 可以设置RadioButton的各种属性,如文字、颜色、大小等,以满足界面设计需求。 5. **添加RadioButton到RadioGroup**: 添加RadioButton到RadioGroup,使用`addView()`方法: ```java ...
在使用Flex 4技术开发数据展示界面时,常常需要在DataGrid组件中嵌入RadioButton,以便用户可以在多个选项之间做选择。本节内容重点讲解了如何在Flex4的DataGrid中嵌入RadioButton,并提供了相应的实现思路和代码。 ...
总的来说,通过创建自定义的ItemRenderer并在其中添加RadioButton,我们可以实现在Flex4 DataGrid中嵌入单选按钮的功能,使用户能够方便地选择一行数据。同时,需要注意的是,必须正确处理RadioButton的状态同步和...
在安卓开发中,有时我们需要根据需求动态地在界面上添加组件,例如在RadioGroup中添加RadioButton。本示例代码着重讲解如何在Android应用中实现这一功能。RadioGroup是一种布局容器,用于管理一组RadioButton,使得...
在Flex开发中,有时我们需要在DataGrid组件中嵌入单选按钮(RadioButton)来实现用户只能选择一行数据的功能。在给定的标题和描述中,我们看到如何在Flex的DataGrid中实现这一功能。以下是对这个话题的详细解释: ...
4. **UIStackView**:UIStackView是一种方便的布局工具,它可以将多个视图水平或垂直堆叠,自动处理间距和对齐,对于创建RadioButton组特别有用。 5. **Tag与Target-Action**:为每个RadioButton分配唯一的tag,...
在C# WinForm应用开发中,自定义RadioButton控件是一种常见的需求,这通常涉及到扩展.NET Framework提供的默认RadioButton控件的功能,以满足特定的设计或交互需求。本教程将深入讲解如何在Visual Studio 2005及其更...
1. **创建Drawable资源**:首先需要为RadioButton创建一个Drawable资源文件,通常是一个XML文件,用来定义不同状态下的背景样式。 2. **设置RadioButton的背景**:通过设置`android:background`属性来引用第一步创建...
4. 关联RadioButton与ViewPager:在RadioGroup的监听器中,根据选中的RadioButton更新ViewPager的当前页面。可以使用ViewPager的setCurrentItem(int item)方法,其中item参数对应于RadioButton的tag。 5. 可选:...
1. **创建新模板**:在XAML文件中,为RadioButton定义一个新的ControlTemplate。例如: ```xml <RadioButton> <RadioButton.Template> <ControlTemplate TargetType="RadioButton"> <!-- 新的模板内容将放在这里...
RadioButton是Android的 android.widget.RadioGroup 类中的一个子类,它在视觉上表现为一个小圆圈,未被选中时为空,被选中时填充。RadioGroup用于管理多个RadioButton,确保同一时间只有一个RadioButton被选中。 ...
在C#代码中,我们可以使用循环遍历数据源,并为每个项目创建一个新的RadioButton。数据源可以是ObservableCollection或其他类型,只要它可以绑定到控件并触发视图的更新。例如: ```csharp foreach (var item in ...
这可以通过添加一个新的RadioButton或一个Button,并在点击时将所有RadioButton的IsSelected属性设置为false来实现。 在提供的DemoForRadioBtn压缩包文件中,可能包含了实现这一功能的完整代码示例,包括XAML布局和...