`
sopestar
  • 浏览: 22019 次
  • 性别: Icon_minigender_1
  • 来自: 山东曹县
社区版块
存档分类
最新评论

为flash程序制作皮肤【皮肤映射类Skin】

阅读更多
转自:http://www.xncat.com/2010/05/catflash/1135.html

skin类是一个为了更方便的访问皮肤中的对象而设计的类文件。

在flash中每次都要很麻烦的用getChildAt或getChildByName一层一层的来访问皮肤中的元件,这里设计了一种更简洁的方式来获得设计人员制作的flash文件中的元件或绑定类。
只要继承Skin类并作一些简单的设置就可以用$()方法直接获得某个ui元件,$c()获得某个绑定类,$u获得包含多个ui元件的ui模块。
我通过一个示例文件来详细讲述skin类中的几种用法。

示例文件从这里下载:skin-sample

我们先来看看示例皮肤文件中的类绑定截图
skin映射

先用皮肤的文档类继承Skin类,skin类继承了Sprite类,所以不用担心文档类需要继承Sprite的问题
皮肤文件端:


package {
	import flash.display.Sprite;
	import com.monboo.skin.Skin;
	public class CatSkin extends Skin {
		public function CatSkin() {
		}
	}
}

再在文档类的构造方法中定义皮肤中提供的对象

通过三种方法定义皮肤中的对象
public function addClass(cl:Class,cName:String):void
addClass定义绑定类
public function addUI(cName:String,uName:String):void
addUI定义显示对象模块
public function addMap(mapName:String,path:String):void
addMap定义显示对象模块某层级的对象的访问映射

最后在加载皮肤的应用程序端访问皮肤中的对象:


/********
** load skin
*********/
var albumSkin:Object;
var __albumSkin:Class;
var skinUrl:String="http://www.xncat.com/wp-content/uploads/2010/05/catSkin.swf";
loadSkin();

function loadSkin():void {
	var loadSkin:Loader = new Loader();
	var context:LoaderContext = new LoaderContext();
	context.checkPolicyFile=true;
	context.applicationDomain=new ApplicationDomain(ApplicationDomain.currentDomain);
	loadSkin.load(new URLRequest(skinUrl),context);
	loadSkin.contentLoaderInfo.addEventListener(Event.COMPLETE,skinLoadedFunc);
}
function skinLoadedFunc(e:Event):void {
	__albumSkin=e.target.applicationDomain.getDefinition("CatSkin") as Class;
	albumSkin = new __albumSkin();

	trace("[Skin loaded successfully!]");
}

主要有三种访问皮肤内容的方法
1 . 访问皮肤中的类
例如我们要获得皮肤中的CtrlUI,PlayerBoxUI,ThumDrag,ThumbUI几个类,从而实现在皮肤文件加载完成后,可以方便的得到这些类的引用,这种情况适用方法1.
皮肤文件端:
public function addClass(cl:Class,cName:String)
cl:Class参数:在皮肤文件中的绑定类
cName:String参数:加载皮肤后获得这个绑定类的名称


addClass(ThumbUI,"ThumbUI");
addClass(ThumbDrag,"ThumbDrag");
addClass(CtrlUI,"CtrlUI");
addClass(PlayerBoxUI,"PlayerBoxUI");

加载皮肤的应用程序端:
public function $c(cName:String):Class
cName:String参数:加载皮肤后获得这个绑定类的名称


var thumbDrag:Class = albumSkin.$c("ThumbDrag") as Class;
var thumbUI:Class = albumSkin.$c("ThumbUI") as Class;
var ctrlUI:Class = albumSkin.$c("CtrlUI") as Class;
var playerBoxUI:Class = albumSkin.$c("PlayerBoxUI") as Class;

2 . 访问皮肤中的显示对象模块
比如我们要访问皮肤文件中一个实例化的显示模块volumeControl,它里面有比较复杂的显示对象层级,有比较多的按钮对象,我把为了方便把这个模块绑定成一个类,在应用程序端只需要获得这个模块实例,并addChild到显示列表中就行了。
皮肤文件端:
public function addUI(cName:String,uName:String):void
cName:String参数:加载皮肤后获得这个模块绑定类的名称
uName:String参数:在皮肤文件中模块的实例名


addClass(VolumeControl,"VolumeControl");
addUI("VolumeControl","vControl");

加载皮肤的应用程序端:
public function $u(uName:String):Sprite{
uName:String参数:在皮肤文件中模块的实例名


addChild(albumSkin.$c("vControl"));

3 . 访问皮肤中的 显示对象模块中的某一个ui
当我们获得了某个显示对象模块后,如何访问它里面比较复杂的显示对象层级,就可以用到这第三种方法了。
皮肤文件端:
public function addMap(mapName:String,path:String):void
mapName:String参数:映射名,通过这个名称可以获得某一个层级的显示对象
path:String参数:映射路径,如vControl.volumUp.soundLine


addClass(VolumeControl,"VolumeControl");
addUI("VolumeControl","vControl");
addMap("soundLine","vControl.volumUp.soundLine");

加载皮肤的应用程序端:
public function $(mapName:String):Sprite
mapName:String参数:映射名,通过这个名称可以获得某一个层级的显示对象


var soundLine:Sprite = albumSkin.$("soundLine"));

注:

你可以把皮肤ui分离成一个独立的皮肤文件用于应用程序加载,也可以不分离把皮肤ui跟应用程序位于同一文件。如果是分离的话,你得在加载成功后的方法中获取皮肤中的对象,如果不分离的话,可以直接访问皮肤中的对象。

分享到:
评论

相关推荐

    皮肤程序SkinTest_demo

    皮肤程序SkinTest_demo是一个专为初学者设计的教程项目,旨在教授如何在界面控件编程中应用皮肤技术。皮肤技术是一种流行的用户界面设计方法,它允许开发者改变软件外观,提供个性化的视觉体验,同时增强软件的用户...

    mfc skin vc 皮肤

    "MFC skin VC 皮肤"指的是使用MFC框架为Visual C++(VC6)开发的应用程序添加自定义外观和主题,也就是我们常说的“皮肤”功能。皮肤可以改变程序界面的颜色、样式、图标等元素,以提供个性化和美观的用户体验。 在...

    MFC皮肤 skin++

    Skin++则是一个专门用于MFC程序的皮肤引擎,它允许开发者为自己的MFC应用添加丰富的视觉效果和用户界面风格,使软件看起来更加美观、个性化。 在MFC中集成Skin++,首先你需要了解MFC的基本架构和类库使用方法。MFC...

    C#程序-网络共享盘符映射程序

    C#程序-网络共享盘符映射程序 Process cmd = new Process(); cmd.StartInfo.FileName = "cmd.exe"; cmd.StartInfo.RedirectStandardOutput = true; cmd.StartInfo.RedirectStandardInput = true; cmd.StartInfo....

    79605308baoyingshe.rar_MATLAB胞映射_胞映射_胞映射matlab_胞映射程序_胞胞映射

    胞映射程序,可以用来计算胞映射方法,matlab编写

    一个简单播放器皮肤(SKIN)示例

    "一个简单播放器皮肤(SKIN)示例"是这样的一个项目,它展示了如何为音乐播放器设计和实现自定义的皮肤,以提供更加个性化的视觉效果和交互体验。 首先,我们来了解一下“SKIN”或“皮肤”。在软件开发中,皮肤是一种...

    logistic映射,tent映射,Henon映射,Kent映射的Matlab程序及图像

    包括logistic映射,tent映射,Henon映射,Kent映射的Matlab程序及图像。(Including the logistic map, tent map, Henon mapping Kent Matlab program and image mapping.)

    nhibernate映射类代码生成器

    只需配置好数据库连接信息,选择要生成映射的表,工具就会自动生成符合规范的映射类,将数据库结构转化为可以直接在项目中使用的对象模型。 总的来说,"nhibernate映射类代码生成器"是一个实用的开发工具,它通过...

    Android 应用 更换皮肤(skin apk安装实现)

    1. **皮肤资源管理**:在设计皮肤时,你需要为每个需要更换的界面元素创建对应的资源文件,如布局文件、图片、颜色值等,并将其组织在一个特定的目录结构下,例如`res/skin/green`、`res/skin/theme_main`和`res/...

    MFC 皮肤 换肤 skin++

    Skin++是一个专门用于MFC应用的皮肤引擎,它为MFC应用程序提供了强大的换肤能力。Skin++设计的核心理念是通过XML文件来描述界面元素的外观和行为,使得开发者无需深入研究图形界面的底层实现,就能轻松实现软件的...

    单片机通过SPI外扩FLASH程序代码

    以上是对"单片机通过SPI外扩FLASH程序代码"这一主题的详细解析,涵盖了SPI通信基础、单片机SPI配置、外扩FLASH特性和读写程序设计的关键步骤。理解这些知识点,将有助于你成功地在项目中实现单片机与外扩FLASH的高效...

    vc程序轻松换皮肤(1.0)

    "vc程序轻松换皮肤(1.0)"是一个专为VC++开发者设计的资源,它旨在通过简洁的代码实现这一目标,让开发者能够快速地为他们的应用程序添加个性化皮肤。下面将详细介绍这个主题,包括皮肤技术的基本原理、VC++中的控件...

    uart_update.zip_RAM映射表_flash映射ram

    合理地使用和配置RAM和Flash,以及灵活地映射中断向量表,可以优化系统的响应时间、提升程序运行效率,同时为未来的固件更新和功能扩展提供便利。 综上所述,这个压缩包文件可能包含了实现以上功能的相关代码、配置...

    材质映射源程序

    在这个"材质映射源程序"中,包含的TMap.cpp和TMap.h文件很可能是实现这一功能的核心代码。 TMap.cpp通常是一个实现类的源文件,其中包含了函数的定义和具体的操作逻辑。在这个上下文中,TMap可能代表一个材质映射类...

    界面换皮肤程序

    【界面换皮肤程序】是一种应用程序,它允许用户根据个人喜好更改软件的视觉外观,通常涉及窗口、按钮、菜单等元素的样式。这种功能在许多现代软件中被广泛采用,为用户提供个性化体验。在这个特定的程序中,我们看到...

    计算logistic映射李雅普诺夫指数的程序

    在MATLAB环境中编写程序来计算Logistic映射的李雅普诺夫指数,可以帮助我们分析该系统的动态行为。 MATLAB程序通常会包含以下几个关键部分: 1. **定义Logistic映射**:Logistic映射由一个迭代公式给出,即`x(n+1)...

    nandflash烧录文件制作

    烧录文件制作是将操作系统、应用程序和其他必要数据写入NAND Flash的过程,以实现设备的初始化和功能实现。本文将深入探讨如何制作支持烧录器烧录的NAND Flash文件,特别是采用UBI(Unsorted Block Images)格式的...

    映射文件操作封装类

    在这个类中,我们将定义一个名为`LogFileMap`的类,该类的核心功能是对映射文件进行操作。类的结构可能包括以下部分: 1. **成员变量**:用于存储映射文件的相关信息,如文件句柄、映射视图的指针、文件大小等。 2....

    NandFlash驱动程序

    5. **页面管理和地址映射**:由于Nand Flash的存储结构是以页和块为单位的,而非连续的字节流,因此驱动程序需要进行地址映射,将逻辑地址转换为物理地址,便于上层文件系统使用。 6. **ECC校验**:为了保证数据的...

    MFC的大量Skin++界面库

    Skin++则是针对MFC的界面美化库,它允许开发者为应用程序创建各种皮肤,从而改变用户界面的外观和风格,使得应用看起来更加丰富多彩,个性化且专业。 Skin++库的核心功能在于它提供了一种机制,允许开发者将不同...

Global site tag (gtag.js) - Google Analytics