UI开发占据了项目一半以上的工作量,一个好的习惯有助于项目的快速完成。 所以就开发过程中的一些注意事项做如下的说明。
ITE提供整套开发包,解压后GUI Tool(工具名称 Drawrocker) :sdk\itu\tool\bin\DrawrockerGUIDesigner.exe
界面如下:(可以参考SDK提供dwawrocker使用文档了解控件使用与开发)

一、命名規則(可以参考的sdk中demo project就是按照如下的规则实作,当然这是个人习惯)
1. 會被程式呼叫的 widget 名稱必須為 Unique
2. Layer:(全小寫:layername )Layer
Ex: mainLayer
3. 產生 layer code:layer_(全小寫:layername ).c
Ex: layer_main.c
4. Widget:(全小寫:layername)+(開頭大寫:功用)+(Widget)
Ex: mainVolumeIcon
5. Export Function:(widget 名稱開頭大寫)+(動作)
Ex: MainVolumeButtonOnPress
二、提升效能
1. 使用 ituTextSetString 在 text/textbox 產生字串會經過 render 的動作,如
此會拖慢效能,盡量以預先產生圖片的方式來規避(主要要留意界面上字体大,字非常多的情况)
2. 由於 ituSceneFindWidget 會降低效能,因此只要在開頭做一次即可,指针定义为全局即可
Ex: if(!mainVolumeIcon){ Do ituSceneFindWidget() }
3. 若用到數學計算,盡量用查表的方式對應
Ex: sin cos 把數值先寫成表,運算時用查表的方式去做運算
4. 避免在畫 UI 的線程(以下統稱 main 線程)裡做太多事,UI线程本就需要快速draw, 如果做一些延时会导致 ui线程 fps下降严重,导致画面卡顿严重。
Ex: 讀寫外部訊號,或是 open file 開檔讀寫等,這些動作都會對畫 UI 造成影響, 如要设计请蚕蛹multi task,外部等待方式来实作。
處理方式:移到另外的線程處理,線程裡必須有適當的 sleep,讓系統有機
會做 content switch 在不同線程做切換。
下面一点也非常重要,如果不注意会导致概率性的死机,花屏,字体显示异常,图片显示异常等,所以在项目开始的时候知道这条规则是非常重要的。
5. itu的APIs只能在畫UI的線程(main線程)裡呼叫,不能在其他線程中呼叫,會造成死機
處理方式:
如果在其他線程裡有呼叫 itu APIs 的需要,可利用 event 或 queue
的方式通知 main 線程來做。這部份可參考 scene.c 中demo project ProcessCommand函数实现方式,如有问题再请咨询FAE
另外,如何知道在使用中没有遵循上面这个规则,可以通过工程config配置检测出来。
在KConfig组态工具中做如下操作:
a、勾选 Develop Environment->Develop Mode
b、找到并勾选 Libraries->itu->Assert thread (ITU_ASSERT_THREAD)选项
做了如上操作后 ,在程序运行的过程中会检测 出ITU 相关API 不合理使用,打印出
“itu thread assertion fail”提示。
6. UI layer 裡的 OnTimer function,其 return 值是有意義的,當 return true
時會觸發重新畫 UI 的動作,如果太頻繁就會影響 UI 操作的流暢度
處理方式:只有在有需要重畫 UI 的時候,才 return true,否則一律 return
false
7. 在 UI 畫面 Frame Rate 可設 60 FPS,但如果進入影像播放畫面,必須降為 30
FPS
8. 中斷 ISR 裡如有印訊息的需求,不能使用 printf,必須改用 ithPrintf,
ithPrintf 才是 reentrant function
9. 檢查 nor cache 與 font cache 是否開足夠大,一般建議值為 nor cache:
0x200000,font cache: 0xFA000
10.儘量減少 overdraw 的情況發生,被完全遮住的 Widget 可以將它設成
Unvisible 或 Transparent
11.儘量使用 RGB565 的圖代替 RGB8888,BitBlt 的速度比 AlphaBlend 的速度快
很多
三、撰寫程式小技巧
1. 在 layer code 中盡量不要有其他 layer 的 widget 或 function,保持乾淨
2. Layer 的 AlwaysVisible 為 ture 並且 Visible 為 ture 則不會有 OnEnter 事
件,若需要 ituSceneFindWidget 可在 OnEnter logoLayer 時做
3. 使用 ituTextSetString 產生中文並且在 win32 模擬,在 code 開頭加入
#pragma execution_character_set("utf-8") 才可顯示出正確字串
四、GUIDesigner 小技巧
1. 字型統一用 文泉驛等寬微米黑
2. Icon 要有 transform 的效果,就不能設 stretch 屬性為 true
3. Widget 有載入圖片,可在點擊 System.Drawing.Bitmap 後鍵入 Delete 清除
4. 名稱修改時,不要用左右鍵調整游標,只能用 Home、End 和滑鼠
如果你了解过ITE平台开发肯定也知道 ITE平台UI开发可以在win32上仿真模拟,快捷有效的实现UI效果。
如果想了解请看这里 ITE Win32仿真
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道rubyonrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现