|  **银杏科技有限公司旗下技术文档发布平台**  ||||
|技术支持电话|**0379-69926675-801**|||
|技术支持邮件|Gingko@vip.163.com|||
^  版本  ^  日期  ^  作者  ^  修改内容  ^
|  V1.0  |  2020-12-6  |  yang  |  初次建立  | 
===== 实验十六:lv_spinner缓冲标志 =====
==== 一、缓冲标志 ====
缓冲标志是一段在圆环上旋转的弧,它的工作原理与弧形指示器类似,详情请参考弧形指示器章节。另外缓冲标志仅支持通用事件。
缓冲标志由以下两部分构成:
  * LV_SPINNER_PART_BG 背景圆环(主要部分)。
  * LV_SPINNER_PART_INDIC 旋转弧(虚拟部分)。
==== 二、设置弧长 ====
旋转弧的长度可以通过 **lv_spinner_set_arc_length(spinner, deg)** 来调节, **deg** 为旋转弧的角度,默认为60度弧长。
{{ :icore4t:icore4t_rtt_lvgl_16_1.gif?direct |}}
void lv_gui_run(void){
	lvgl2rtt_init("lcd");                                        /* 初始化lvgl2rtt */
	
	lv_obj_t * preload1 = lv_spinner_create(lv_scr_act(), NULL); /* 创建缓冲标志 */
	lv_obj_set_size(preload1, 40, 40);                           /* 设置尺寸 */
	lv_obj_align(preload1, NULL, LV_ALIGN_CENTER, -50, 0);       /* 设置位置 */
	
	lv_obj_t * preload2 = lv_spinner_create(lv_scr_act(), NULL); /* 创建缓冲标志 */
	lv_obj_set_size(preload2, 40, 40);                           /* 设置尺寸 */
	lv_obj_align(preload2, NULL, LV_ALIGN_CENTER, 50, 0);        /* 设置位置 */
	lv_spinner_set_arc_length(preload2, 180);                    /* 设置弧长为180度 */
}
==== 三、旋转速度 ====
旋转速度可以通过 **lv_spinner_set_spin_time(preload, time_ms)** 调节, **time_ms** 为转一圈所需的毫秒数,默认转一圈为1000ms。
{{ :icore4t:icore4t_rtt_lvgl_16_2.gif?direct |}}
void lv_gui_run(void){
	lvgl2rtt_init("lcd");                                         /* 初始化lvgl2rtt */
	
	lv_obj_t * preload1 = lv_spinner_create(lv_scr_act(), NULL);  /* 创建缓冲标志 */
	lv_obj_set_size(preload1, 40, 40);                            /* 设置尺寸 */
	lv_obj_align(preload1, NULL, LV_ALIGN_CENTER, -50, 0);        /* 设置位置 */
	lv_spinner_set_spin_time(preload1, 2000);                     /* 设置旋转速度 */
	
	lv_obj_t * preload2 = lv_spinner_create(lv_scr_act(), NULL);  /* 创建缓冲标志 */
	lv_obj_set_size(preload2, 40, 40);                            /* 设置尺寸 */
	lv_obj_align(preload2, NULL, LV_ALIGN_CENTER, 50, 0);         /* 设置位置 */
	lv_spinner_set_spin_time(preload2, 1000);                     /* 设置旋转速度 */
}
==== 四、旋转类型 ====
用户可以设置不同的旋转类型:
  * **LV_SPINNER_TYPE_SPINNING_ARC** 旋转弧线在顶部放慢速度。
  * **LV_SPINNER_TYPE_FILLSPIN_ARC** 旋转弧线,在顶部放慢速度,拉伸弧线。
  * **LV_SPINNER_TYPE_CONSTANT_ARC** 旋转弧以恒定速度旋转。
若要设置旋转类型请使用函数 **lv_spinner_set_type(preload, LV_SPINNER_TYPE_...)** 。
{{ :icore4t:icore4t_rtt_lvgl_16_3.gif?direct |}}
void lv_gui_run(void){
	lvgl2rtt_init("lcd");                                         /* 初始化lvgl2rtt */
	
	lv_obj_t * preload1 = lv_spinner_create(lv_scr_act(), NULL);  /* 创建缓冲标志 */
	lv_obj_set_size(preload1, 40, 40);                            /* 设置尺寸 */
	lv_obj_align(preload1, NULL, LV_ALIGN_CENTER, -80, 0);        /* 设置位置 */
	lv_spinner_set_type(preload1, LV_SPINNER_TYPE_SPINNING_ARC);  /* 设置旋转类型 */
	
	lv_obj_t * preload2 = lv_spinner_create(lv_scr_act(), NULL);  /* 创建缓冲标志 */
	lv_obj_set_size(preload2, 40, 40);                            /* 设置尺寸 */
	lv_obj_align(preload2, NULL, LV_ALIGN_CENTER, 0, 0);          /* 设置位置 */
	lv_spinner_set_type(preload2, LV_SPINNER_TYPE_FILLSPIN_ARC);  /* 设置旋转类型 */
	lv_obj_t * preload3 = lv_spinner_create(lv_scr_act(), NULL);  /* 创建缓冲标志 */
	lv_obj_set_size(preload3, 40, 40);                            /* 设置尺寸 */
	lv_obj_align(preload3, NULL, LV_ALIGN_CENTER, 80, 0);         /* 设置位置 */
	lv_spinner_set_type(preload3, LV_SPINNER_TYPE_CONSTANT_ARC);  /* 设置旋转类型 */
}
==== 五、旋转方向 ====
用户可以使用 **lv_spinner_set_dir(preload, LV_SPINNER_DIR_FORWARD/BACKWARD)** 来改变缓冲标志的旋转方向。