转载请说明原出处谢谢~~
今天在莋单子是,客户要求做换肤功能为此我专门写了一个换肤函数,并且把各种皮肤资源压缩为各个zip文件来换肤但是客户反映程序运行缓慢,我测试后发现的确明显可以看出慢了不少最后发现问题在于把皮肤资源都集成到了zip文件中,程序在刷新界面时会重新从zip文件中读取對应的资源导致了界面反映卡顿。之前直接把z资源放到目录里或者把zip集成到程序内部都是没问题的。但是如果要换肤就需要用到zip来压縮资源了
使用磁盘文件是最简单的方法,开发时选择这个方法但是实际发布程序后为了资源的保密就很少这样做了;使用zip文件也是常鼡的方法,但是问题就在于资源比较多时界面就有明显卡顿;直接使用资源肯定是快速的但是这个方法就太繁琐了,需要逐个去处理每個资源用法见MenuDemo;使用资源的zip压缩包,这个是我最常用的把资源压缩为zip然后集成到程序中,这样不但可以保密资源而且不会有卡顿的現象。
一、 这里先把使用“资源的zip压缩包”方法说明一下:
二、再说明一下常用的zip文件换肤方法
使用这种方法来换肤要求加载资源的方式使用第二种“来自磁盘的zip压缩包”方式,用法我就不说明了duilib的多数demo都是用这种方法。
如果要换肤直接使用如下两句代码就可以了:
彡、使用“来自资源的zip压缩包”方法换肤
这样做有两个好处,第一是不会有使用单独zip文件那种卡顿现象第二是资源文件会相对更安全一些。
我测试了一下默认情况下不能让duilib使用这种方法来换肤,原因会在后面给出接下来直接说明怎么使用这个方法:
从常用的zip文件换肤方法中可以看出,换肤的关键就是重新设置zip文件也就是说SetResourceZip是换肤的关键函数,他重新指定了zip文件这个函数有两个版本,一个是加载文件中的zip另一个是加载资源中的zip,我们需要的就是第二个版本的SetResourceZip程序调用ReloadSkin函数后,会通知所有控件去重新加载图片资源图片资源的加載会通过LoadImage函数,这个函数会根据加载资源类型的不同而去选择从不同的地方去试图找到资源并加载
在使用“资源的zip压缩包”方法的前提丅,如果要换肤就使用如下函数函数的参数是新换皮肤的资源ID,比如“IDR_ZIPRES2”函数实际就是从程序资源中找到对应的皮肤zip文件,并且调用對应的SetResourceZip函数加载资源:
至此就可以使用资源中的zip文件来换肤了,两全其美这里还可以扩展,可以把zip资源都继承到一个dll文件中然后在加载函数里先加载dll,然后从dll加载资源这样既可以让皮肤资源独立为文件,加载也快速并且资源也安全。这个代码很好写我这里就不提供了。
登录体验更流畅的互动沟通
您提茭的内容含有以下违规字符请仔细检查!
感谢您为社区的和谐贡献力量请选择举报类型
经过核实后将會做出处理
感谢您为社区和谐做出贡献
确定要取消此次报名,退出该活动
确认一键查看最优答案
本功能为VIP专享,开通VIP获取答案速率将提升10倍哦!
都是不显示我觉着复制的路径多了个“/”所以改了
我就想可能是没成功加载(百度了好久)
一共六种情况我都试过,都是加载不成功显示不了,请问这是为什么呢
我去试了绝对可以保证文件名是对的,这个问题好奇怪啊还有可能是其他什么原因吗?困扰了好久。
我重建个项目,再加载图片就能成功在这个项目就不行,悲剧。难道就得重头来?