【转】深入浅出Flex组件生命周期Part2 ─ 使用ActionScript3开发移动Spark组件的皮肤类

YOLOv8n行人检测实战:从数据集准备到模型训练 本文详细介绍了使用YOLOv8n进行行人检测的完整流程。首先阐述了YOLOv8的优势:高速推理(300+FPS)、更高精度、易用性和轻量化(仅6MB)。接着通过Docker搭建GPU训练环境,配置32GB共享内存避免数据加载问题,并安装必要的框架和OpenCV组件。数据集采用COCO2017标注格式,包含归一化坐标的YOLO标签文件。通过可视化脚本验证标注准确性后,提出多数据集融合训练策略以增强模型泛化能力。最后使用Ultralytics框架启动训练,展现了从环境搭建到模型训练的完整技术路径。该方案兼顾检测 阅读详情

原文地址:http://www.donglongfei.com/2011/07/actionscript-3-customize-mobile-spark-component-part2/


Part2将使用AS3为Part1中已经创建的component类定制Skin类

五. 创建CSS

我们首先创建将要在Skin类中使用的CSS。样式文件为Style.css,建在src的styles目录下。

代码如下:

/* CSS file */
@namespace s "library://ns.adobe.com/flex/spark";
@namespace components "com.mark.demos.components.*";
 
components|MobileItemRenderer
{
	fontSize: 20;
	color: #FF0000;
	font-family: "_sans";
	min-height: 50;
	padding-left: 10;
} 

为了应用样式,在主应用文件(本例为SparkItemRendererDemo.mxml)中加入样式声明:

<fx:style source="styles/Style.css"/>

六. AS3创建Skin类:MobileItemSkin.as

下面,我们的重头戏开始了:使用AS3为之前的component类MobileItemRenderer创建配套的Skin类。

1. 创建MobileItemSkin.as

在com.mark.demos.skins包下创建ActionScript类MobileItemSkin.as,该类继承spark.skins.mobile.supportClasses.MobileSkin。

使用Flex开发移动应用项目时,Flex4.5提供了一套专为移动设备优化了的类库和组件。这些类和组件为移动设备的优化包括性能和DPI自适应等等,其中MobileSkin发挥了非常重要的作用,这个类是所有适配移动应用的ActionScript Skin类的基类。
我们在Part4会解释如何使用AS3开发适配Web或桌面的Spark组件的Skin类,这时我们会继承spark.skins.SparkSkin。
值得注意的是MobileSkin的父类是UIComponent。(在Part3,我们会深入讨论MobileSkin和SparkSkin。)现在,让我们跳出代码,重新考虑Spark的Skinnable组件这件事情。现在我们已经知道,要创建两个类,一个component类,一个skin类,而两个类都是继承于UIComponent,从这一点上来说两个类没什么本质上的区别,只不过通过Flex框架代码,来让一个类管理数据和逻辑,一个类管理样式和外观。
下面我们来逐步完成Skin类:MobileItemSkin.as,在这个过程中,您不碍多想一想这个类是如何和component类协同的呢?

2. hostComponent

每个Skin类都要声明它的宿主:hostComponent。Skin类的存在目的就是为Component类服务的,失去了Component,Skin类就失去了意义。一列失去灵魂的列车奔驰得再快,也没有任何价值。
《Using Flex 4.5》中说明:

a skin class will define a hostComponent property so that is can get a reference to the component that uses it. This is not required by the skinning contract but is recommended. Skin classes can also share data with their host component by using data binding.

hostComponent帮助Skin从Component中“拉”数据,通过这种方式获取开发者设定在component类上的属性以及相关变化。
下面代码为我们的MobileItemSkin类,设定了hostComponent。需要注意的是hostComponent的类型:MobileItemRenderer。如我们之前说到的,Skin类为Component类提供的服务是“专项”服务,因此,这里hostComponent类型必须与本Skin类的服务目标component类类型一致。

private var _hostComponent:MobileItemRenderer;
		public function get hostComponent():MobileItemRenderer
		{
			return _hostComponent;
		}
 
		public function set hostComponent(value:MobileItemRenderer):void
		{
			_hostComponent = value;
		}

3. createChildren()

接下来,我们要为component类来“组装”Skin。在本例中,就像MobileItemRenderer中通过SkinPart元数据标签已经说明的,我们要为其装配一个StyleableTextField或其子类类型的文本。我们并不是一步到位的为Skin生成该对象,并安装到位。还记得吗?Flex架构非常重要的工作就是“延迟计算”,因此,首先,我们要做的只是“创建子对象”: createChildren。
我们通过覆盖createChildren方法来完成这项任务。(很多时候,编写自定义组件感觉就像完成一道填空题,尤其对那些刚刚掌握创建自定义组件的开发者来说,我们尽量在Part3来为您指明这些“填空”题的出题者的思路和想法。)
我们来完成第一项填空题:覆盖createChildren方法。在此之前,你需要声明一个StyleableTextField类型的变量labelDisplay。这帮助你完成了Component和Skin类之间的一项“契约”。

public class MobileItemSkin extends MobileSkin
	{
 
		public var labelDisplay:StyleableTextField;

下面是createChildren方法真正完成创建labelDisplay的方法,在该方法中使用addChild把labelDisplay添加在显示列表中。

		override protected function createChildren():void{
			addLabel();
		}
 
		private function addLabel():void{
			labelDisplay = new StyleableTextField();
			addChild(labelDisplay);
		}

4. commitProperties()

如果你了解UIComponent的生命周期,你应该知道在UIComponent的生命周期中,Flex会依序调用createChildren,commitProperties,measure,layoutChrom和updateDisplayList方法,这些方法依次完成了各自专有的任务,其中方法commitProperties,measure和updateDisplayList会在UIComponet创建后,调用invalidateProperties,invalidateSize和invalidateDisplayList方法后,在下一帧时再次被调用,
鉴于MobileSkin父类依然是UIComponent,因此这些基本原理依然适用。
(Part3问题:如果你是一个究甚解的开发者,你会注意到在Skinnable Spark Component这个体系里存在着Component类和Skin类两个UIComponent子类,也就意味着,在Skinnable Component的生命周期中,存在着之前我们说到的两套UIComponent生命周期。在深入理解Spark Component生命周期的过程中,这个事实经常会混淆开发者。)
在本例中,我们使用Skin类的commitProperties来为labelDispaly定义外观属性。代码如下:

		override protected function commitProperties():void{
			super.commitProperties();
			styleLabel();
		}
 
		private function styleLabel():void{
			if(labelDisplay && hostComponent && hostComponent.data){
				if(currentState=="selected"){
					labelDisplay.text= "远离高铁";
				}
				if(currentState=="normal"){
					labelDisplay.text= hostComponent.data.label;
				}
				labelDisplay.defaultTextFormat = new TextFormat( getStyle( "fontFamily" ), getStyle( "fontSize" ),getStyle("color") );
				labelDisplay.commitStyles();
			}
		}

需要说明的是styleLabel方法。

  1. 在该方法中,我们通过判断当前的状态(依据currentState变量)来为labelDisplay设定外观。 (Part3问题:这个神秘的currentState从哪里来?又由谁赋值? )
  1. 在开发自定义组件时,要意识到,这段代码会在组件未出生开始就会执行,因此,应该时时判断要处理的部件或者其他类似hostComponent之类的对象是否已经实例化,不能想当然地使用。
  1. Part3问题:在component类中,我们也声明了labelDisplay,那么此labelDisplay和彼labelDisplay有何关系?在《Using Flex4.5》或者很多讲述Spark架构的文章都说,我们很少会为component类实现commitProperties方法(彼方法不同于此方法),那么,这是为什么呢?

5. measure()

我们已经设定了labelDisplay的外观,接下来,我们需要告知Flex本组件的默认最小尺寸和默认尺寸:覆盖measure方法。

		override protected function measure():void{
			super.measure();
			var h:Number=0;
			var w:Number=0;
 
			if(labelDisplay){
				w=labelDisplay.textWidth + getStyle("paddingLeft");
				h=labelDisplay.textHeight;
			}
 
			measuredMinHeight = getStyle( "minHeight" );
			measuredHeight = Math.max(h,measuredMinHeight);
			measuredWidth=w;
			measuredMinWidth=Math.max(unscaledWidth,w);
		}

在上述代码中,我们通过getStyle获取CSS样式单中指定的minHeight来确定最小值。如果你深入阅读LabelItemRenderer.as和IconRenderer.as源码,你会发现measure方法要考虑的问题很多,本例中做了简化。

6. layoutContents()方法

按照UIComponet的“填空题”应试法则,下面我们应该完成的是UpdateDisplayList方法,来实现最终的布局。但是MobileSkin覆盖了UIComponent类的UpdateDisplayList方法,新的UpdateDisplayList方法摘录于下:

   override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
    {
        graphics.clear();
 
        super.updateDisplayList(unscaledWidth, unscaledHeight);
 
        layoutContents(unscaledWidth, unscaledHeight);
 
        if (useSymbolColor)
            applySymbolColor();
 
        drawBackground(unscaledWidth, unscaledHeight);
    }

可以看到,updateDisplayList的主要工作被分为layoutContents和drawBackground两个方法。因此,对于创建移动应用组件皮肤,我们很少会直接覆盖updateDisplayList方法,而是覆盖layoutContents和drawBackground方法。
本例中,我们覆盖layoutContents方法来布置我们的部件labelDisplay。

	override protected function layoutContents(unscaledWidth:Number, unscaledHeight:Number):void{
			var labelWidth:Number=0;
			var labelHeight:Number=0;
 
			if(labelDisplay){
				labelDisplay.width=unscaledWidth;
				labelDisplay.x = getStyle( "paddingLeft" );
				labelDisplay.y = (unscaledHeight - labelDisplay.textHeight ) / 2;
			}
 
			// we draw a separator line between each item
			var lineY:int = unscaledHeight -1;
			graphics.clear();
			graphics.lineStyle( 1 );
			graphics.moveTo( 0, lineY );
			graphics.lineTo( unscaledWidth, lineY );
		}

我们设置了labelDisplay的坐标,并且在其下边缘绘制了一条1像素的横线。

7. 更新状态

实际上,现在你就可以使用MobileItemRenderer了,但是如果你把他作为itemRenderer赋给List后,运行后,你会发现 MobileItemRenderer并没有及时的响应用户操作,更新状态。
我们还需要覆盖神秘的commitCurrentState()方法,来为Skin类更新状态。

		override protected function commitCurrentState():void{
			super.commitCurrentState();
			styleLabel();
		} 

如果你看过Part1,你会记得,我们已经为Component类MobileItemRenderer.as声明了SkinState:normal和selected。在用户选中本item后,List会调用selected的set方法,然后该方法又会调用invalidateItemState来通知Flex更新状态。我们也按照要求,让Component类MobileItemRenderer乖乖的提供了方法getCurrentSkinState,来通知某人我目前的状态。而在我们的Skin类中,很明显,某个神秘先生又通过currentState变量告知了当前状态,而前提是,我们要乖乖的实现commitCurrentState方法。
各位看管,明白了吗?
Flex在布一个很大的局!有一双“手”在操控着“不明真相的群众”。群众们只要按要求做好填空题,自然有全国最牛拜的机构-“相关机构”,帮你把文章写完!
然而,作为一个有智商的现代码农,我们要求信息透明,因此,不才在Part3中将为你解释这个神秘的相关机构。
我们的commitCurrentState方法如下:

		override protected function commitCurrentState():void{
			super.commitCurrentState();
			styleLabel();
		}

七. 调用MobileItemRenderer,完成View

目前,我们已经完成了Component类和Skin类,比较简陋,但是在Part3您会看到他的价值。
完成示例项目中的SparkItemRendererDemoView.mxml,测试这个MobileItemRenderer。

< ?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" title="主页视图" xmlns:components="com.mark.demos.components.*">
 
	<fx:declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:declarations>
	<s:list width="100%" height="100%" labelField="label">
		<s:dataprovider>
			<s:arraycollection>
				<fx:object label="珍惜生命"/>
				<fx:object label="珍惜生命"/>
				<fx:object label="珍惜生命"/>
				<fx:object label="珍惜生命"/>
				<fx:object label="珍惜生命"/>
				<fx:object label="珍惜生命"/>
			</s:arraycollection>
		</s:dataprovider>
 
		<s:itemrenderer>
			<fx:component>
				<components:mobileitemrenderer />
			</fx:component>
		</s:itemrenderer>
 
	</s:list>
</s:view>

运行后,您会得到如下结果:

八. 未完待续…

上帝花七天创造了世界,问题是,他是怎么做的呢?

如果你依照步骤看完了Part1和Part2,那么,这也许是最“疑惑重重”的教程之一,我们为您演示了如何创建一个Spark架构下Skinnable组件类。但是,又带了了如此多的问题:

  • 为什么Skin一定要提供与Component类中SkinPart指定名称一致的部件变量?Component类中的SkinPart和Skin类中的对象有何关系?
  • component类如何知道skin类添加了SkinPart,继而来调用partAdded呢?
  • partAdded中,我们直接使用了labelDisplay来添加侦听器?可labelDispaly从何而来?与instance是和关系
  • invalidateSkinState是如何通知Skin类的呢?
  • Skin类是如何调用getCurrentSkinState的呢?
  • component类和skin类之间的“契约”源于何处?
  • Skin类和Component类如何协同,两套UIComponent生命周期又如何交错在一起
  • currentState从何而来?
  • component类的commitProperties方法和Skin类的commitProperties方法?

朋友,让我们在Part3中再见,揭开这些为什么。




超详细教程YoloV8官方推荐免费数据集网站Roboflow一键导出Voc、COCO、Yolo、Csv等格式 YoloV8官方推荐了一个数据集网站,就是Roboflow。Roboflow是一个数据集管理平台,提供了免费的数据集,同时也支持上传自己的数据集进行格式转换。使用Roboflow,开发者可以方便地获取所需格式的数据集,无需手动转换格式。此外,Roboflow还提供了多种数据预处理、数据增强等功能,可帮助开发者更好地优化训练数据 阅读详情

相关推荐

Python 逆向解析知乎盐选反爬字体,实现内容精准还原

本文详细解析了知乎盐选内容的反爬字体机制,并提供了使用Python逆向解析WOFF字体文件的完整方案。通过fontTools库构建解码字典,实现乱码文本的精准还原,帮助开发者应对动态字体策略,同时强调法律与道德风险。

weixin_29268385的博客 1295

Flex4组件教程:自定义两级导航菜单组件

Flex4组件教程:自定义两级导航菜单组件Posted 四月 8th, 2011 by 郭少瑞Flex4郭少瑞<br />声明:本文为RIAMeeting原创文章,您可以自由转载,但请务必说明文章来源并保留原文链接,谢谢!<br />对于两级导航菜单,我们应该不会陌生,很多网站都使用了这个效果,如下面这张图片所示,当鼠标划过或点击一级菜单,会出现相应的二级菜单,也就是我们经常说的菜单联动效果。<br /><br />当然图片中的这个效果是基于HTML和JavaScript实现的,那么在Flex开发中,我们能

jakeorion的专栏 3338

【零基础入门哈希签名架构,从Lamport到SPHINCS+】第二集 哈希签名树 Merkle Tree Authentication

在第一集中,我们一直忽略了一个问题。设想一下,假如有一个Hacker(黑客),在截获到Sender发送给Receiver的公钥之后,把这个公钥改成Hacker自己的公钥,然后再发给Receiver,那么Receiver就会误认为这是Sender的公钥。所以我们之前所说放方案,其安全性都需要建立在一个前提下:Receiver需要确认公钥确实是Sender发出的。

m0_50572808的博客 2452

flex 生命周期 ibm引用

Flex 本质 提起 Flex 我们不得不追述其发展历史以及两个很重要的名词或者说技术,那就是 Flash 和 Flash Player。Flash 是 Adobe 推出的基于时间轴的交互式矢量图和 Web 动画的标准。一般被大量应用于互联网网页的矢量动画设计。而 Flash Player,则是运行 Flash 程序的播放器,特别是 flash player 9 之后,他通过 Action...

weixin_30299709的博客 165

别再手动找触点了!EPLAN线圈触点映像的3种显示方式与F键/Ctrl+B快捷键实战

本文详细解析EPLAN线圈触点映像的3种显示方式与F键/Ctrl+B快捷键实战技巧,帮助电气设计工程师提升图纸操作效率。通过精简编号、路径栏显示和元件旁可视化三种模式的应用场景对比,结合快捷键肌肉记忆训练法,实现触点快速定位与管理,大幅减少手动查找时间。

weixin_42522964的博客 481

Oracle 从入门到精通系列(入门篇)1.1-Oracle 数据库发展史

Oracle 从入门到精通系列(入门篇)1.1-Oracle 数据库发展史

LuciferLiu_DBA 2190

Flex 4 移动特效实例

<![CDATA[ import mx.effects.easing.Bounce; ]]> <mx:Blur duration="1000" blurXFrom="0.0" blurXTo="10.0" blurYFrom="0.0" blurYTo="1

u010395804的专栏 1052

YOLOv11 改进 - 特征融合 | 小目标检测救星:DySample动态上采样减少特征丢失

本文介绍了超轻量且高效的动态上采样器DySample与YOLOv11的结合,以解决传统上采样器工作负载大、应用场景受限的问题。DySample从点采样角度构建上采样,绕过动态卷积,使用PyTorch标准内置函数实现,无需定制CUDA包,能大幅减少参数、FLOPs等资源消耗。我们将DySample代码集成进YOLOv11。实验脚本显示,结合DySample的YOLOv11在多个密集预测任务中或表现出色。

魔改工程师的博客 1415

FLEX皮肤实例4_skinpart

1.概述       上篇文章《FLEX皮肤实例3_自定义类与皮肤交互数据》,相关资料《FLEX皮肤2_皮肤原理》。       皮肤与组件的数据交互是双向中的      1.皮肤调用组件属性:使用:           [HostComponent("spark.components.Button")]           例:{hostComponent.label}

幽幽残月 之 人间正道是沧桑 3190

Google Earth Engine 红树林制图方法的代码(三个模块)

谷歌地球引擎红树林制图方法(GEM)提供了一种直观、易用且可复制的工具,适用于广泛的非专业沿海管理者和决策者。该工具全面回顾并整合了相关的红树林遥感文献,并利用云计算的力量,包括简化的基于图像的潮汐校准方法。GEM 可免费用于非营利用途,并在 GEE 中运行,包含全面且详细注释的代码。GEM 专门设计用于绘制全球范围内多日期红树林分布并量化其动态变化。目前可用的工具和方法未能充分利用沿海管理者通常持有的丰富地方专业知识——GEM 致力于填补这一空白,帮助结合地方专业知识与 GEE 的云计算能力。

此星光明博客 559

【WRF数据准备】海温(SST)数据替换

【WRF数据准备】海温(SST)数据替换

WW、forever的博客 1117

[Android Studio]AS连接手机 安装应用

[Android Studio]AS连接手机 安装应用下载 Android WiFi ADB添加ADB至系统环境变量连接手机USB连接手机和计算机ADB连接手机和计算机 完全是一路踩着坑实现出来的,搜索了众多教程及解决bug的方法,以下内容记录本人实现过程。 下载 Android WiFi ADB Android Studio -> File -> Settings -> Plugins -> Marketplace 搜索 Android WiFi ADB 并install 重启 A

Unun_的博客 5259

7.26华为OD机试真题 新系统 - 炸弹人的雷区数量 (Java/Py/C/C++/Js/Go)

7.26华为OD机试真题 新系统 - 炸弹人的雷区数量 (Java/Py/C/C++/Js/Go)

算法大师! 791

自定义Flex4+的Spark组件part1:使用ActionScript3开发Spark组件Component类

前言 Flex开发移动应用时,出于性能考虑,需要使用AS3编写组件Skin,而不是使用MXML。实际上,通过使用AS3编写组件皮肤,开发者可以更深入的了解Flex的组件生命周期,无论是对于移动应用开发还是传统的桌面或者Web应用开发,都大有裨益。 本文通过一个实例,来展示如何使用AS3开发一个Spark组件和对应的移动组件Skin,更重要的是解释与之相关的Spark组件生命周期知识。 关

gsh10zh的专栏 1076

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[转]深入浅出Flex组件生命周期Part1─ 使用ActionScript3开发Spark组件Component类

前言 Flex开发移动应用时,出于性能考虑,需要使用AS3编写组件Skin,而不是使用MXML。实际上,通过使用AS3编写组件皮肤,开发者可以更深入的了解Flex的组件生命周期,无论是对于移动应用开发还是传统的桌面或者Web应用开发,都大有裨益。 本文通过一个实例,来展示如何

give me five 2406

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

在Flex 4里创建自定义组件和皮肤

本文来自:http://coenraets.org/blog/2010/01/creating-a-custom-component-and-skins-in-flex-4/Flex 4里Spark皮肤模块的基本思路是: 完全将组件的行为与其视觉表示(visual representation)解耦开来。你在一个类里编译组件的行为代码,在可互换MXML皮肤类里,编译其视觉表示的代码。这个新的构

lihe111的专栏 6172

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Flex4之皮肤定制【Skin类和Skin类】

第一、关于spark.skin.SparkSkin类的    1.SparkSkin介绍   (1)spark.skins,这个包里面只有一个class:SparkSkin,非美工的程序员可以通过这个class来实现任意自定义控件的样式。   (2)SparkSkin是一个Group类型的容器。(它继承自Group)   (3)全部的mx.spark的可视化控件的外观全部都是SparkSki...

JavaCrazyer的ItEye(codewu.com)技术博客 281

Flex 4.0 之commitProperties函数的使用

commitProperties () 方法   override protected function commitProperties():void   处理对组件设置的属性。此方法是一种高级方法,可在创建 UIComponent 的子类时覆盖。 您无需直接调用此方法,当您使用 addChild() 方法向容器中添加组件时,或调用组件的 invalidateProperties()

布衣不舍的专栏 2420

构建第一个Flex的Mobile APP

Flash Builder 4.5已经支持直接创建Flex Mobile Project,写一个最简单的例子 1、建立工程 右击--》新建--》输入工程名“MyFirstMobileApp”   点击“Next”进入下一步 修改初始化的标题文本信息为“Home”(默认为HomeView),勾选“Google Android”、“Automatically reorient”(默...

weixin_34187862的博客 184

关于学习Flex皮肤的一点小结

这一节主要还是看的官方的API,看的比较无聊,毕竟是第一次看全英文的东西,下面来做一个相关的记录吧算是(主要讨论在Flash Builder 4下编程环境下的一些心得)。 我感觉做皮肤其实主要还是和CSS相关,不过FLEX中又多了一些更加好的东西,我主要感觉比较纠结的是因为FLEX的几个版本的不同,导致默认的主题不同,因此有时候两天的东西不一样不好调试,一个是spark主题,默认在MXML文件中

流浪天空 1172

Flex移动皮肤-第一部分:增强的皮肤功能基础

Flex 4.5提供的移动增强的皮肤特性,支持触摸交互、性能优良,并且考虑到了内存占用问题。尽管目前市场上有不少性能优异的设备,但典型的Spark皮肤(包括Flex 4引入的默认皮肤)却没有能够在移动设备上得到很好的应用。Adobe为移动优化过的皮肤在设计时就考虑到平衡两个对立的目标:性能优异却又容易创建。虽然MXML皮肤在某些情况下是有用的,但Adobe还是建议遵循以下简单的方针,确保Flex

万里浮云的专栏 2148

Flex移动skin–第3部分:多平台开发

在关于创建Flex移动皮肤系列文章的第二部分里,我们讨论了屏幕密度(DPI)对组件皮肤以及移动应用布局所带来的影响。 我还展示了如何使用缩放应用,特定密度的位图,以及CSS元媒介查询以调整和适应多种DPI值。\u0026#xD;\n除了屏幕尺寸,屏幕密度以及外形差异以外,Flex移动应用开发者必须在着重于各个平台之间的不同点。 除了Android系统以外,Flex4.5.1以及Flash Buil...

啊啊啊啊2 431

Flex创建自己的皮肤

使用Flex来创建自己的组件或者皮肤,只需要继承直接继承SkinnableComponent,在使用时只需要将希望改变皮肤的组件的skinClass赋值成刚才的皮肤即可。 深入的使用是在皮肤中创建state。 首先在组件中定义isEnabled属性:                private var _isEnabled:Boolean = false; public functi

netlinking的专栏 720

Flash/Flex 移动端开发 之 现状

Flex4.5出来之后最有影响力的莫过于移动开发方面的发展,目前移动端开发通常指的是最有影响力的Android和iOS平台。如果要用Flash/Flex开发移动端程序,目前开发iOS必须是AS工程,而Android可以为Flex工程和AS工程,用Flex开发iOS程序会在稍后的版本推出。 契机: Android程序一般用Java开发,而iOS一般用Objective-C开发,而用同一种语言开发

万里浮云的专栏 3594
上一篇: [转]深入浅出Flex组件生命周期Part1─ 使用ActionScript3开发Spark组件Component类
下一篇: 解决UltraEdit打开UTF-8文件光标定位不准的问题
mnorst
博客等级 码龄16年 38粉丝 76原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值