<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. MotionEvent的getX(),getY()与getRawX(),getRawY()区别
  2. 死磕 java集合之TreeMap源码分析(一)——红黑树全解析
  3. TCP 三次握手与四次挥手
  4. Win10光驱不见了
  5. leetcode39. 组合总和
  6. 栈、队列 java代码实现
  7. 卷积层和池化层的计算公式的区别
  8. linux command read the content,Linux while 和 read 的用法
  9. 正则校验 4位数字_推荐收藏,工作中常用的正则表达式总结
  10. 为什么在java中不能创建泛型数组
  11. [OpenGL] OpenGL制作三维字符雨屏保程序
  12. web网页设计期末课程大作业~超高仿英雄联盟LOL游戏官网设计与实现(HTML+CSS+JavaScript)
  13. Stepping Number
  14. 动态网页怎样才能被搜索引擎收录
  15. JS实现飞行的小鸟游戏-简易版
  16. 百度智能云在线活体检测
  17. windows:QueryPerformanceCounter函数/PerformanceCounter函数
  18. PAT 1046 划拳 (15分)
  19. 《炬丰科技-半导体工艺》 玻璃薄化蚀刻
  20. 用html和css制作小黄人,CSS3 小黄人案例

热门文章

  1. 计算机仿真气垫上的直线运动验报告,在气垫导轨上测加速度的实验报告.doc
  2. 超详细anaconda安装教程(Mac,Windows,Linux版本)
  3. Docker启动Elastic Search报错 ERROR: [1] bootstrap checks failed
  4. 如何用MASM5.0 (图解)
  5. vue组件之间的传参总结
  6. 机器学习—导论day01
  7. 欧洲5000年文明史,到底是怎么来的?
  8. 超级菜鸟怎么学习数据分析
  9. LCD驱动分析(一)
  10. 【JavaScript】Generator函数