<span style="font-size:14px;">在使用CocoStudio做界面时,会大量使用到图片控件(ImageView),
我们这个来分析一下ImageView的使用:
1、
在CocoStudio中,对于图片控件,我们可以通过把模式调整到Custom,
来使用九宫格的方法,在Auto模式下是不能使用九宫格的。2、
导出json文件中ImageView的配置:
{"classname": "ImageView","name": null,"children": [],"options": {"__type": "ImageViewSurrogate:#EditorCommon.JsonModel.Component.GUI","classname": "ImageView","name": "Image_9","classType": "CocoStudio.EngineAdapterWrap.CSImageView","fileNameData": {"path": "dd/04.png", //图片路径"plistFile": "","resourceType": 0},"scale9Enable": false,"scale9Height": 43,"scale9Width": 43}}
3、
ImageViewReader类,解析上面ImageView生成json对象的类,最终要的一个函数:
void ImageViewReader::setPropsFromJsonDictionary(ui::Widget *widget, const rapidjson::Value &options)
{.....//jsonPath json文件存放路径,不包括json文件名,只有路径std::string jsonPath = GUIReader::shareReader()->getFilePath();ui::ImageView* imageView = (ui::ImageView*)widget;//resourceType:使用的资源类型,如两种:单独图片文件或者打包成.plist的图片文件//const rapidjson::Value& imageFileNameDic = DICTOOL->getSubDictionary_json(options, "fileNameData");int imageFileNameType = DICTOOL->getIntValue_json(imageFileNameDic, "resourceType");switch (imageFileNameType){case 0: //单独图片{/*"fileNameData": {"path": "dd/04.png", //图片名"plistFile": "","resourceType": 0},*/std::string tp_i = jsonPath;//获取资源图片path,并加上jsonPath路径,组成最终的图片全路径;//所以这里就有一个限制,就是在工程资源中,图片文件一定要和json文件放到同一个目录。//我们可以通过修改代码的方式屏蔽这个问题。const char* imageFileName = DICTOOL->getStringValue_json(imageFileNameDic, "path");const char* imageFileName_tp = NULL;if (imageFileName && (strcmp(imageFileName, "") != 0)){imageFileName_tp = tp_i.append(imageFileName).c_str();imageView->loadTexture(imageFileName_tp); //这个函数很重要,后面分析}break;}case 1: //打包的图片{/*"fileNameData": {"path": "actor_attrFontNormal.png","plistFile": "hero.plist","resourceType": 1},*/const char* imageFileName = DICTOOL->getStringValue_json(imageFileNameDic, "path");//注意:这里imageFileName只是图片path,并没有加上json文件路径imageView->loadTexture(imageFileName, ui::UI_TEX_TYPE_PLIST);break;}default:break;}//九宫格相关bool scale9EnableExist = DICTOOL->checkObjectExist_json(options, "scale9Enable");bool scale9Enable = false;if (scale9EnableExist){scale9Enable = DICTOOL->getBooleanValue_json(options, "scale9Enable");}imageView->setScale9Enabled(scale9Enable);if (scale9Enable){......imageView->setCapInsets(CCRectMake(cx, cy, cw, ch));   }WidgetReader::setColorPropsFromJsonDictionary(widget, options);
}4、上面有一个loadTexture函数,这个函数很重要:
loadTexture函数是ImageView类的成员函数:
参数:
fileName:图片文件名
texType:文件类型,按照我们上面的分析,总共有两种
typedef enum
{UI_TEX_TYPE_LOCAL,UI_TEX_TYPE_PLIST
}TextureResType;void ImageView::loadTexture(const char *fileName, TextureResType texType)
{if (!fileName || strcmp(fileName, "") == 0){return;}_textureFile = fileName;_imageTexType = texType;switch (_imageTexType){case UI_TEX_TYPE_LOCAL://单个图片文件if (_scale9Enabled) 如果使用九宫格,则使用CCScale9Sprite*{extension::CCScale9Sprite* imageRendererScale9 = STATIC_CAST_SCALE9SPRITE;imageRendererScale9->initWithFile(fileName);imageRendererScale9->setCapInsets(_capInsets);}else //如果不是九宫格,则使用CCSprite*{//#define STATIC_CAST_CCSPRITE static_cast<CCSprite*>(_imageRenderer)//其实ImageView就是包含了一个CCSprite*成员变量_imageRenderer,//真正显示图片的是这个成员变量。/*bool CCSprite::initWithFile(const char *pszFilename){CCAssert(pszFilename != NULL, "Invalid filename for sprite");//这里会根据我们传进来的图片路径,去加载纹理。CCTexture2D *pTexture = CCTextureCache::sharedTextureCache()->addImage(pszFilename);if (pTexture){CCRect rect = CCRectZero;rect.size = pTexture->getContentSize();return initWithTexture(pTexture, rect);}// don't release here.// when load texture failed, it's better to get a "transparent" sprite than a crashed program// this->release(); return false;}*/CCSprite* imageRenderer = STATIC_CAST_CCSPRITE;imageRenderer->initWithFile(fileName);}break; case UI_TEX_TYPE_PLIST://.plist图片文件if (_scale9Enabled){extension::CCScale9Sprite* imageRendererScale9 = STATIC_CAST_SCALE9SPRITE;imageRendererScale9->initWithSpriteFrameName(fileName);imageRendererScale9->setCapInsets(_capInsets);}else{//如果是.plist格式的图片文件,则使用initWithSpriteFrameName方法初始化//使用这种方法就需要提前把.plist文件加载进来。/*bool CCSprite::initWithSpriteFrameName(const char *pszSpriteFrameName){CCAssert(pszSpriteFrameName != NULL, "");CCSpriteFrame *pFrame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(pszSpriteFrameName);return initWithSpriteFrame(pFrame);}*/CCSprite* imageRenderer = STATIC_CAST_CCSPRITE;imageRenderer->initWithSpriteFrameName(fileName);}break;default:break;}_imageTextureSize = _imageRenderer->getContentSize();imageTextureScaleChangedWithSize();updateAnchorPoint();updateFlippedX();updateFlippedY();updateRGBAToRenderer(_imageRenderer);
}</span>

源引:http://blog.csdn.net/tianxiawuzhei/article/details/45849439

CocoStudio:ImageView分析相关推荐

  1. android中view用法,Android中ImageView用法实例分析

    本文实例分析了Android中ImageView用法.分享给大家供大家参考,具体如下: 猜牌游戏大家可能以前都玩过,这里我们用这个小游戏来说明ImageView的用法. 首先,在res/drawabl ...

  2. android:scaletype没作用,ImageView的属性android:scaleType的作用分析

    在网上查了好多资料,大致都雷同,大家都是互相抄袭的,看着很费劲,不好理解,自己总结一下,留着需要看的话来查找. 代码中的例子如下: android:id="@+id/iv_bit_1&quo ...

  3. ImageView 常用属性的分析

    最近在图片上犯了迷糊,在礼拜天抽出时间把属性一个一个 试了一遍,在这里和大家分享一下 ImageView的属性: android:src 用于显示图片 android:maxWidth="& ...

  4. android如何隐藏imageview,Android编程实现切换imageView的方法分析

    本文实例讲述了Android编程实现切换imageView的方法.分享给大家供大家参考,具体如下: 最近在做五子棋的界面的时候,需要有一块区域动态显示当前棋局的情况,考虑到字体和现实效果,我决定用图片 ...

  5. ImageView.ScaleType属性分析

    ImageView的Scaletype决定了图片在View上显示时的样子,包括是否进行缩放.等比缩放.缩放后展示位置及显示图片的整体还是部分等.Android 提供了八种scaleType的属性值. ...

  6. android 图片分析,Android ImageView圆形头像 图片完全解析

    我们在做项目的时候会用到圆形的图片,比如用户头像,类似QQ.用户在用QQ更换头像的时候,上传的图片都是矩形的,但显示的时候确是圆形的. 原理:先在canvas上面画一个圆形,参照圆形的起点坐标.半径, ...

  7. CocoStudio UI 编辑器的使用

    详细教程:http://www.cocoachina.com/bbs/read.php?tid=161567 Table of Contents 1 游戏中的 UI 1.1 基于 Cocos2d-x ...

  8. Android-----View绘制流程以及invalidate()等相关方法分析 .

    引自:http://blog.csdn.net/qinjuning/article/details/7110211 前言: 本文是我读<Android内核剖析>第13章----View工作 ...

  9. Fresco源码分析之Hierarchy

    上篇文章我们分析了Fresco中的DraweeView,对其中的一些原理以及方法进行了解析.在这过程中我们了解到,DraweeView中是通过DraweeHolder来统一管理的.而DraweeHol ...

最新文章

  1. office excel单列数据类型不一致,导入时部分数据为空
  2. wxpython多个面板_wxpython:隐藏其中一个拆分窗口面板
  3. appcompat_v7 引起的新建Android工程编译不过的问题 (转载)
  4. html调用js函数_Java Web初学者探索学习笔记10—网络API的js数据接口调用解决方案...
  5. 求整数 在二进制表示中有多少个1的方法
  6. 大型网站登录信息保存实现-整理
  7. “人工智障”,我们还能忍你多久?
  8. 全球超级计算机500强 中国独占两个第一
  9. php 脚本调试,PHP 调试脚本
  10. Android 字母导航条实现
  11. 八、jdk工具之JvisualVM之四--VisualVM 进行性能分析及调优
  12. 如何让Linux上的GPG error 无法验证的这个公钥 NO_PUBKEY D97A3AE911FXXXXX 出错信息消失?
  13. springboot 乱码之URLDecoder解析
  14. nProtect GameGuard 的破解
  15. 绕过tp路由器管理密码_TP-Link路由器登录密码怎么重置【详细介绍】
  16. 如何提高在外国网站下载软件或文件的速度
  17. potplayer最佳设置_potplayer最佳设置
  18. 百度地图LV1.5实践项目开发工具类bmap.util.jsV1.1
  19. 建立名字为Project1的解决方案
  20. Axure使用中继器为表格添加数据

热门文章

  1. 【skill】收缩表段(shrink space)
  2. Docker安装emqx详解(配置SSL证书、开启WSS、鉴权)
  3. 小程序UI组件 Vant Weapp Popup弹出层和Picker选择器 组合使用按钮被遮盖恢复不了的问题
  4. oracle中求众数的sql,SQL中求字段的众数和中位数
  5. java paypal 支付集成_PayPal支付与动态Paypal帐户集成
  6. 发了两个月传单,转行做了程序员
  7. 从天气预报网页API获取天气预报数据
  8. 【免费】三款超火的文字转语音工具推荐,爆款短视频配音软件必备
  9. 换分币:用一元人民币兑换成1 分、2 分和5 分硬币,共有多少种不同的兑换方法
  10. 上海人代会:代表聚焦自贸区新片区建设