You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
2.9 KiB

  1. cc.ImageView.ClassName = "ImageView"
  2. function cc.ImageView:saveToXmlNode(xmlNode)
  3. cc.Widget.saveToXmlNode(self , xmlNode);
  4. xmlNode.Texture = getUITexture(self:getTextureFile() , self:getImageTexType());
  5. xmlNode.Scale9Enabled = self:isScale9Enabled();
  6. if xmlNode.Scale9Enabled then
  7. xmlNode.CapInsets = self:getCapInsets();
  8. local scale9 = tolua.cast(self:getVirtualRenderer() , "cc.Scale9Sprite");
  9. if scale9 then
  10. xmlNode.BorderEnabled = scale9:isBorderEnabled();
  11. xmlNode.Border = scale9:getBorder();
  12. end
  13. end
  14. end
  15. function cc.ImageView:loadFromXmlNode(xmlNode)
  16. cc.Widget.loadFromXmlNode(self , xmlNode);
  17. setUITexture(self.loadTexture , self , xmlNode.Texture);
  18. self:setScale9Enabled(xmlNode.Scale9Enabled);
  19. if self:isScale9Enabled() then
  20. self:setCapInsets(xmlNode.CapInsets);
  21. if xmlNode.BorderEnabled then
  22. self:setBorderEnabled(true);
  23. self:setBorder(xmlNode.Border);
  24. end
  25. end
  26. end
  27. function cc.ImageView:extend(node)
  28. cc.Widget:extend(node);
  29. node:setName("ImageView")
  30. end
  31. function cc.ImageView:createNode()
  32. local layer = cc.ImageView:create();
  33. cc.ImageView:extend(layer);
  34. return layer;
  35. end
  36. -- 设置默认值
  37. function cc.ImageView:setDefaults()
  38. self:loadTexture("res/default/image.png");
  39. self:setCapInsets(cc.rect(0,0,0,0));
  40. end
  41. function cc.ImageView:loadTextureFromPlist(filename)
  42. --如果资源不存在加载将会崩溃
  43. local cache = cc.SpriteFrameCache:getInstance()
  44. local spriteFrame = cache:getSpriteFrameByName(filename);
  45. if tolua.isnull(spriteFrame) then
  46. logD(filename)
  47. logD("纹理找不到,崩溃被阻止!")
  48. if isWin32Platform() then
  49. showTooltip("纹理找不到,崩溃被阻止!")
  50. end
  51. uploadLogs(GAME_ERROR_TYPE.TEXTURE)
  52. return
  53. end
  54. self:loadTexture(filename, cc.TextureResType.plistType);
  55. end
  56. --[[
  57. 这个接口的存在,是为了解决以下BUG
  58. 如果ImageView之前是通过plist获取纹理,
  59. 然后在通过读取单个图片设置纹理,就会显示错乱
  60. 解决方法就是在setTexture()之前调用 setDefaults()
  61. --]]
  62. function cc.ImageView:setTexture2(texture)
  63. if not texture then
  64. return
  65. end
  66. self:setDefaults();
  67. self:setTexture(texture)
  68. end
  69. -- 重新加载这个控件的所有图片
  70. function cc.ImageView:postloadImage()
  71. local isScale9 = self:isScale9Enabled();
  72. self:setScale9Enabled(not isScale9);
  73. self:setScale9Enabled(isScale9);
  74. end
  75. -- 收集这个控件用到了哪些PList文件
  76. function cc.ImageView:collectPListFiles()
  77. local files = {};
  78. collectPListFile(files , self:getTextureFile() , self:getImageTexType());
  79. function getParent(node, path)
  80. local parent = node:getParent()
  81. if parent then
  82. local nameParent = parent:getName()
  83. path = nameParent.. "\\"..path
  84. return getParent(parent, path)
  85. else
  86. return path
  87. end
  88. end
  89. local nodePath = getParent(self, self:getName());
  90. for k,v in pairs(files) do
  91. print("plist = " .. v .. ", nodePath = ".. nodePath)
  92. end
  93. return files;
  94. end