`
sopestar
  • 浏览: 22295 次
  • 性别: 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++

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

    mfc skin vc 皮肤

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

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

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

    【易语言】开源-Skin皮肤模块源码

    【易语言开源-Skin皮肤模块源码】是一个专为易语言设计的皮肤模块,它允许开发者轻松地为自己的程序添加各种美观的皮肤效果,提升软件的用户界面(UI)体验。易语言是一款中国本土开发的编程环境,以其简单易学的...

    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++中的控件...

    nandflash烧录文件制作

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

    uart_update.zip_RAM映射表_flash映射ram

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

    NandFlash驱动程序

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

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

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

    MFC的大量Skin++界面库

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

    易语言内存映射类模块

    易语言内存映射类模块源码,内存映射类模块,创建映射,打开文件_,取颗粒数,映射内存,读基址,释放内存,关闭文件_,写入字节集,移动读写位置_,读位置指针,删除字节集,映射_创建,关闭句柄,映射_置内存,写字节集,映射_释放...

    VB映射网络硬盘源程序

    例如,可能有一个名为`MapNetworkDrive`的函数,它使用Windows API(应用程序接口)来执行实际的映射操作。 `Form1.frm`文件代表了程序的用户界面,其中包含各种控件,如按钮、文本框和标签,用户通过这些控件与...

    C++ 可以解决64位程序调用32位库、双向信道跨进程间通信的文件映射处理类源码

    源码包含了封装的功能模块类以及测试类, 全部源码都可以用VS2020编译通过,请放心使用! 友情提示,为了兼顾一些旧代码,预编译头文件用的是StdAfx.h,如果需要更换为最新的pch.h,请按照以下步骤操作: 1将StdAfx....

    vc 开发的程序 添加皮肤

    然而,通过引入皮肤技术,我们可以为程序添加更丰富的外观,提升用户体验。"vc 开发的程序 添加皮肤"这个主题就是关于如何在VC++程序中实现界面皮肤化的教程。 首先,理解皮肤在软件中的作用:皮肤是改变应用程序...

    skin++换肤 pb

    Skin++是一个流行的界面皮肤库,它允许开发者为他们的软件提供各种视觉风格,使得应用程序看起来更加现代化和吸引人,特别是对于Windows Vista及后续版本的操作系统。 描述中的"vista等皮肤"意味着Skin++支持创建...

Global site tag (gtag.js) - Google Analytics