2018-10-19 07:33:17 +08:00
|
|
|
|
## 避坑指南
|
|
|
|
|
|
2018-10-20 11:53:20 +08:00
|
|
|
|
> 世间总是有坑的,可能是因为填坑很困难,也可能是因为填了这个坑就要挖另外一个坑。但是,有坑并不代表我们需要踩进去,绕开这些已知的坑,可以让生活更美好。当然,今天的坑,明天也许已经填了,定期阅读本清单,有助于身心健康。
|
2018-10-19 07:33:17 +08:00
|
|
|
|
|
|
|
|
|
把你踩过的坑告诉我们,我们尽力去填了它们,实在填不了,也可以列在这里,供大家参考:
|
|
|
|
|
|
2018-10-20 11:53:20 +08:00
|
|
|
|
--------
|
|
|
|
|
|
2020-08-03 22:00:47 +08:00
|
|
|
|
#### 1. 在 PC 上模拟运行时显示正常,而在开发板上出现局部残留的现象。
|
2018-10-19 07:33:17 +08:00
|
|
|
|
|
2018-10-20 11:53:20 +08:00
|
|
|
|
**原因**
|
2018-10-19 07:33:17 +08:00
|
|
|
|
|
2020-08-03 22:00:47 +08:00
|
|
|
|
* 脏矩形是根据控件的位置和大小 (x/y/w/h) 计算的,也就是超出范围的部分不会被重绘。
|
|
|
|
|
* 控件的文字和图片超出控件的范围时,一般是不会被裁剪的 (ScrollView 等控件除外)。
|
|
|
|
|
* 在 SDL 模式下,不启用脏矩形,所以在 PC 上可能是正常的。
|
2018-10-19 07:33:17 +08:00
|
|
|
|
|
2018-10-20 11:53:20 +08:00
|
|
|
|
**绕坑**
|
|
|
|
|
|
|
|
|
|
* 保持控件的文本和图片在控件自身的范围内。
|
|
|
|
|
|
|
|
|
|
--------
|
|
|
|
|
|
2021-05-11 15:50:24 +08:00
|
|
|
|
#### 2. 修改了窗体样式描述文件,但是预览时没有任何效果。
|
2018-10-20 11:53:20 +08:00
|
|
|
|
|
|
|
|
|
**原因**
|
|
|
|
|
|
2021-05-11 15:50:24 +08:00
|
|
|
|
* 出于性能考虑,AWTK 使用的是二进制格式的窗体样式数据,XML 格式的窗体样式描述文件只是方便开发者编辑的。
|
|
|
|
|
* 修改了 XML 格式的窗体样式描述文件,还需要将它转成二进制格式,预览时才会生效。
|
2018-10-20 11:53:20 +08:00
|
|
|
|
|
|
|
|
|
**绕坑**
|
|
|
|
|
|
2020-08-03 22:00:47 +08:00
|
|
|
|
* 使用脚本 update\_res.py 更新资源。
|
2021-05-11 15:50:24 +08:00
|
|
|
|
* 或者用命令 bin/themegen 将 XML 格式的窗体样式数据转成二进制的窗体样式数据。
|
2018-10-20 11:53:20 +08:00
|
|
|
|
|
|
|
|
|
--------
|
|
|
|
|
|
2020-08-03 22:00:47 +08:00
|
|
|
|
#### 3. 旋转/缩放动画对按钮无效
|
2018-10-20 11:53:20 +08:00
|
|
|
|
|
|
|
|
|
**原因**
|
|
|
|
|
|
|
|
|
|
* 几乎所有控件都支持平移和淡入淡出动画。
|
2020-08-03 22:00:47 +08:00
|
|
|
|
* 部分控件支持 value 改变的动画(如进度条)。
|
|
|
|
|
* 部分控件支持旋转/缩放的动画(目前只有图片支持)。
|
|
|
|
|
* 滚动动画通常只是用于控件内部实现(如 slide\_view、switch、scroll\_view 和 text\_selector 等)。
|
|
|
|
|
* 旋转/缩放的动画只是改变控件的显示效果,不改变控件的实际大小和位置(脏矩形和事件处理)。
|
2018-10-20 11:53:20 +08:00
|
|
|
|
|
|
|
|
|
**绕坑**
|
|
|
|
|
|
2020-08-03 22:00:47 +08:00
|
|
|
|
* 趋长(吉)避短(凶),平安幸福。
|
2018-10-20 11:53:20 +08:00
|
|
|
|
|
2020-08-03 22:00:47 +08:00
|
|
|
|
#### 4.widget\_move/widget\_resize/widget\_move\_resizes 操作无效。
|
2019-05-15 17:12:14 +08:00
|
|
|
|
|
|
|
|
|
**原因**
|
|
|
|
|
|
2020-08-03 22:00:47 +08:00
|
|
|
|
* 通常是设置 layout 参数,只要 layout 参数存在,widget\_layout 被触发时,就会用该参数重新布局。
|
2019-05-15 17:12:14 +08:00
|
|
|
|
|
|
|
|
|
**绕坑**
|
|
|
|
|
|
2020-08-03 22:00:47 +08:00
|
|
|
|
* 如果你需要调用 widget\_move/widget\_resize/widget\_move\_resizes 修改控件的大小和位置,就不要设置 layout 参数。
|
|
|
|
|
|
|
|
|
|
#### 5. 为什么回调函数的行为很诡异?
|
|
|
|
|
|
|
|
|
|
```c
|
|
|
|
|
my_param_t param;
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
timer_add(on_timer, ¶m, interval);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
**原因**
|
|
|
|
|
|
|
|
|
|
把临时变量 param 作为回调函数的上下文,回调函数在访问 param 时,param 早就被释放了。
|
|
|
|
|
|
|
|
|
|
**绕坑**
|
|
|
|
|
|
|
|
|
|
动态分配或者使用全局变量。最好使用动态分配,但是要记得释放。
|
|
|
|
|
|
|
|
|
|
内存问题请参考我以前写的一篇博客:[大内高手—常见内存错误](https://blog.csdn.net/absurd/article/details/908601)
|