Flex4中的皮肤(2): Skin State

在上一篇 中,定义了一个最简单的SkinnableComponent并为其定义了两个Skin。

对于TransitionSkin,需要在enable时有不同的展现方式,这可以通过Skin State实现。

 

对自定义的SkinnableComponent的修改

 

首先在组件中定义isEnabled属性:

private var _isEnabled:Boolean = false; public function get isEnabled():Boolean { return _isEnabled; } public function set isEnabled(value:Boolean):void { _isEnabled = value; }

 

然后定义SkinState元标签:

[SkinState("normal")] [SkinState("enable")]

 

最后需要将属性值和组件状态关联起来,这是通过覆盖SkinnableComponent的getCurrentSkinState方法实现的。

该方法的最初定义如下:

/** * Returns the name of the state to be applied to the skin. For example, a * Button component could return the String "up", "down", "over", or "disabled" * to specify the state. * * <p>A subclass of SkinnableComponent must override this method to return a value.</p> * * @return A string specifying the name of the state to apply to the skin. * * @langversion 3.0 * @playerversion Flash 10 * @playerversion AIR 1.5 * @productversion Flex 4 */ protected function getCurrentSkinState():String { return null; }

 

在Node中需要覆盖该方法:

override protected function getCurrentSkinState():String { if(isEnabled) return "enable"; return "normal"; }

 

完整的Node代码如下:

Node.as

package skinsample { [SkinState("normal")] [SkinState("enable")] import spark.components.supportClasses.SkinnableComponent; public class Node extends SkinnableComponent { public function Node() { super(); } private var _isEnabled:Boolean = false; public function get isEnabled():Boolean { return _isEnabled; } public function set isEnabled(value:Boolean):void { _isEnabled = value; } override protected function getCurrentSkinState():String { if(isEnabled) return "enable"; return "normal"; } } }


对Skin的修改

Skin中首先需要增加状态的声明:

<s:states> <s:State name="normal" /> <s:State name="enable" /> </s:states>

接下来可以指定Skin元素在哪个状态中出现,默认是在所有状态中出现。XML节点和属性都可以进行指定。

对于XML节点,增加includeIn属性,如:

<s:Button top="0" right="0" bottom="0" left="0" alpha="0" includeIn="enable,normal" />

对于XML属性,增加 属性名称.状态名称 指定特定状态下的属性值,如:

<s:SolidColor color="0x131313" color.enable="0xff0000" />

 

完整的Skin代码如下:

TransitionSkin.mxml

<?xml version="1.0" encoding="utf-8"?> <s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" width="400" height="300"> <s:states> <s:State name="normal" /> <s:State name="enable" /> </s:states> <s:Rect id="rect" radiusX="4" radiusY="4" top="0" right="0" bottom="0" left="0"> <s:fill> <s:SolidColor color="0x131313" color.enable="0xff0000" /> </s:fill> <s:stroke> <s:SolidColorStroke color="0x131313" weight="2"/> </s:stroke> </s:Rect> <s:Button top="0" right="0" bottom="0" left="0" alpha="0" includeIn="enable,normal"/> </s:Skin>

 

PlaceSkin.mxml

<?xml version="1.0" encoding="utf-8"?> <s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" width="400" height="300"> <s:states> <s:State name="normal" /> <s:State name="enable" /> </s:states> <s:Ellipse id="ellipse" top="0" right="0" bottom="0" left="0"> <s:fill> <s:SolidColor color="0x77CC22" /> </s:fill> <s:stroke> <s:SolidColorStroke color="0x131313" weight="2"/> </s:stroke> </s:Ellipse> </s:Skin>

 

使用具有状态的组件和Skin

定义好组件和Skin后,就可以使用了:

NodeSample.mxml

<?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" xmlns:skinsample="skinsample.*"> <fx:Script> <!--[CDATA[ import skinsample.TransitionSkin; ]]--> </fx:Script> <skinsample:Node skinClass="skinsample.TransitionSkin" x="10" y="30" width="50" height="50"/> <skinsample:Node skinClass="skinsample.PlaceSkin" x="80" y="30" width="50" height="50"/> <skinsample:Node skinClass="skinsample.TransitionSkin" x="150" y="30" width="50" height="50" isEnabled="true"/> </s:WindowedApplication>

 

运行效果:

 

 

转载于:https://www.cnblogs.com/holbrook/archive/2009/10/06/2357375.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

休眠自动冲洗的黑暗面

介绍 既然我已经描述了JPA和Hibernate刷新策略的基础知识 &#xff0c;我就可以继续阐明Hibernate的AUTO刷新模式的令人惊讶的行为。 并非所有查询都会触发会话刷新 许多人会认为Hibernate 总是在执行任何查询之前先刷新Session。 虽然这可能是一种更直观的方法&#xff0c;并…

洛谷P1636学画画

传送 这个题我们需要一个大胆的想法&#xff08;虽然AC后看了题解知道这是个定理&#xff09; &#xff08;求证明qwq&#xff09; 如果一个图有2或0个奇点&#xff0c;它就一定可以一笔画出&#xff0c;如果不是2或0个奇点&#xff0c;那答案就是奇点数/2 &#xff08;私认为因…

理解正则

正则的应用场景很多&#xff0c;匹配过滤有价值的内容&#xff0c;所以用好正则有事半功倍的效果正则就是用有限的符号&#xff0c;表达无限的序列正则的一般语法就是两条斜线中间的就是正则主体&#xff0c;可以有许多字符表示转义字符 \是转义字符&#xff0c;简单字符表示自…

vue项目中z-index不起作用(将vue实例挂在到window上面)

问题描述&#xff1a;由于原有项目&#xff08;传统项目&#xff09;中嵌入新的vue组件&#xff0c;dialog弹出框的z-index&#xff1a;999999&#xff1b;任然不起作用&#xff1b; 解决办法&#xff1a;将vue实例挂载到window 解决代码如下&#xff1a; 入口文件index.js中 i…

【算法】称骨算命法

称骨算命法是唐代著名的星象预测家袁天罡称骨的预测方法。这种方法同四柱算命一样&#xff0c;能确定一个人一生的吉凶祸福、荣辱盛衰&#xff0c;准确率很高&#xff0c;又便于掌握和运用。 一个人出生的年、月、日、时各有定数&#xff0c;年、月、日、时的重量都有具体规定。…

IDE:5个最喜欢的NetBeans功能

愉快的发展……。 NetBeans具有许多有趣的功能 &#xff0c;这些功能使开发非常容易&#xff0c;只需很少的步骤&#xff0c;并且可以在非常快速地将产品推向市场的情况下提供高产的环境 。 将我的谈话仅限于五个功能非常困难&#xff0c;而此IDE具有大量有趣的功能。 但是在…

flask总结之session,websocket,上下文管理

1.关于session flask是带有session的&#xff0c;它加密后存储在用户浏览器的cookie中&#xff0c;可以通过app.seesion_interface源码查看 from flask import Flask,sessionapp Flask(__name__)app.secret_key aptx4869 # 必须要指定这个参数app.route(/login)def login():…

Hbase 和 RDBMS的区别

一 Hbase是个什么东西&#xff1f; 首先我们来看看两个概念&#xff0c;面向行存储和面向列存储。面向行存储&#xff0c;我相信大伙儿应该都清楚&#xff0c;我们熟悉的RDBMS就是此种类型的&#xff0c;面向行存储的数据库主要适合于事务性要求严格场合&#xff0c;或者说面向…

css设置背景透明度

设置背景透明用&#xff1a; background-color: rgba(0, 0, 0, 0.4);虽然opacity:0.5;也可以设置背景透明&#xff0c;但是会影响整体&#xff1b;推荐使用rgba设置背景透明&#xff0c;只会在当前的内容内起作用转载于:https://www.cnblogs.com/phermis/p/11395227.html

Hibernate延时加载

首先说明Hibernate3延迟加载只对load,get,find一些内值方法有用&#xff0c;对hql等写sql的无效。延迟加载机制是为了避免一些无谓的性能开销而提出来的&#xff0c;所谓延迟加载就是当在真正需要数据的时候&#xff0c;才真正执行数据加载操作。在Hibernate中提供了对实体对象…

深入了解Oracle IDM审核

在处理敏感信息的任何产品中&#xff0c; 报告都是至关重要的功能。 同样适用于身份和访问管理工具。 Oracle IDM的审核模块是其OOTB报告功能的基础。 让我们快速看一下审核引擎以及它如何促进OIM中的报告功能。 这里展示的用例很简单– 在OIM中更改为用户记录。 从审核的角度…

c#---ref参数

员工基本工资为5000元&#xff0c;奖金方法500元&#xff0c;调用该方法之后为什么工资还是5000元&#xff1f; static void Main(string[] args){double salary 5000;jiangJin(salary);Console.WriteLine(salary);Console.ReadKey();}public static void jiangJin(double sal…

django批量form表单处理

1.应用说明 一般在表单信息录入中&#xff0c;如果存在许多重复提交的信息&#xff0c;我们就需要进行批量处理&#xff0c;比如学生信息的批量录入。 这里一种方式就是使用xlrd模块处理&#xff0c;把学生信息录入到系统内 另外一种方式就是采用我们from组件中提供的formset来…

手写弹出框,设置遮罩,布局设计。

传统的设计弹出框和遮罩 <template> <div> <div class"这里是内容"> <div class"这里是遮罩"></div> </div> </div> </template> 转载于:https://www.cnblogs.com/phermis/p/11395395.html

【转】一步一步教你远程调用EJB

一步一步教你远程调用EJB http://www.diybl.com/course/1_web/webjs/20071226/94785.htmlwww.diybl.com 时间&#xff1a;2007-12-26 作者:佚名 编辑:本站 点击&#xff1a; 686 [评论]前期准备&#xff1a;弄清楚weblogic&#xff08;或jboss&#xff09;、tomcat、JBluder…

ADF:弹出窗口,对话框和输入组件

在本文中&#xff0c;当我们有一个af&#xff1a;popup包含af&#xff1a;dialog并在其中包含输入组件时&#xff0c;我想着重介绍一个非常常见的用例。 在实现此用例时&#xff0c;需要注意一些陷阱。 让我们考虑一个简单的示例&#xff1a; <af:popup id"p1" …

关于codeforces加载慢

昨天cdx报名cf&#xff0c;打开网页10多分钟才交了、、、。 今天问了wxy&#xff0c;百度了一下&#xff0c;以前也搜过&#xff0c;然后就忘记了。 今天记一下。 1.右键单击开始按钮&#xff0c;打开资源管理器&#xff0c;在资源管理器的地址栏中填写“%SystemRoot%\System3…

ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE

前言 这是一篇纯技术干货的分享文章&#xff0c;FreeSql 已经基本完成 .NETCore 最方便的 ORM 使命&#xff0c;我们正在筹备生态的建立&#xff0c;比如 ABP 中如何使用 FreeSql 的实现&#xff0c;需要各种各样的扩展包&#xff0c;好多好多工作量。有没有大神愿意无偿参与做…

Hadoop Ecosystem解决方案---数据仓库

个人总结的一套基于hadoop的海量数据挖掘的开源解决方案.BI系统:Pentahopentaho是开源的BI系统中做得算顶尖的了.提供的核心功能如下:报表功能: 可视化(client, web)的报表设计. 分析功能: 可以生成分析视图&#xff0c;作数据作动态分析. Dashboard功能: 可以定制动态图…

django中间件及中间件实现的登录验证

1.定义 一个用来处理Django的请求和响应的框架级别的钩子&#xff08;函数&#xff09;&#xff0c;相对比较轻量级&#xff0c;并且在全局上改变django的输入与输出&#xff08;使用需谨慎&#xff0c;否则影响性能&#xff09; 直白的说中间件就是帮助我们在视图函数执行之前…