mirror of
https://github.com/lvgl/lvgl.git
synced 2025-01-14 06:42:58 +08:00
101 lines
3.5 KiB
C
101 lines
3.5 KiB
C
#include "../../lv_examples.h"
|
|
#if LV_USE_SCALE && LV_BUILD_EXAMPLES
|
|
|
|
LV_IMAGE_DECLARE(img_hand);
|
|
|
|
lv_obj_t * needle_line;
|
|
lv_obj_t * needle_img;
|
|
|
|
static void set_needle_line_value(void * obj, int32_t v)
|
|
{
|
|
lv_scale_set_line_needle_value(obj, needle_line, 60, v);
|
|
}
|
|
|
|
static void set_needle_img_value(void * obj, int32_t v)
|
|
{
|
|
lv_scale_set_image_needle_value(obj, needle_img, v);
|
|
}
|
|
|
|
/**
|
|
* A simple round scale
|
|
*/
|
|
void lv_example_scale_3(void)
|
|
{
|
|
lv_obj_t * scale_line = lv_scale_create(lv_screen_active());
|
|
|
|
lv_obj_set_size(scale_line, 150, 150);
|
|
lv_scale_set_mode(scale_line, LV_SCALE_MODE_ROUND_INNER);
|
|
lv_obj_set_style_bg_opa(scale_line, LV_OPA_COVER, 0);
|
|
lv_obj_set_style_bg_color(scale_line, lv_palette_lighten(LV_PALETTE_RED, 5), 0);
|
|
lv_obj_set_style_radius(scale_line, LV_RADIUS_CIRCLE, 0);
|
|
lv_obj_set_style_clip_corner(scale_line, true, 0);
|
|
lv_obj_align(scale_line, LV_ALIGN_LEFT_MID, LV_PCT(2), 0);
|
|
|
|
lv_scale_set_label_show(scale_line, true);
|
|
|
|
lv_scale_set_total_tick_count(scale_line, 31);
|
|
lv_scale_set_major_tick_every(scale_line, 5);
|
|
|
|
lv_obj_set_style_length(scale_line, 5, LV_PART_ITEMS);
|
|
lv_obj_set_style_length(scale_line, 10, LV_PART_INDICATOR);
|
|
lv_scale_set_range(scale_line, 10, 40);
|
|
|
|
lv_scale_set_angle_range(scale_line, 270);
|
|
lv_scale_set_rotation(scale_line, 135);
|
|
|
|
needle_line = lv_line_create(scale_line);
|
|
|
|
lv_obj_set_style_line_width(needle_line, 6, LV_PART_MAIN);
|
|
lv_obj_set_style_line_rounded(needle_line, true, LV_PART_MAIN);
|
|
|
|
lv_anim_t anim_scale_line;
|
|
lv_anim_init(&anim_scale_line);
|
|
lv_anim_set_var(&anim_scale_line, scale_line);
|
|
lv_anim_set_exec_cb(&anim_scale_line, set_needle_line_value);
|
|
lv_anim_set_duration(&anim_scale_line, 1000);
|
|
lv_anim_set_repeat_count(&anim_scale_line, LV_ANIM_REPEAT_INFINITE);
|
|
lv_anim_set_playback_duration(&anim_scale_line, 1000);
|
|
lv_anim_set_values(&anim_scale_line, 10, 40);
|
|
lv_anim_start(&anim_scale_line);
|
|
|
|
lv_obj_t * scale_img = lv_scale_create(lv_screen_active());
|
|
|
|
lv_obj_set_size(scale_img, 150, 150);
|
|
lv_scale_set_mode(scale_img, LV_SCALE_MODE_ROUND_INNER);
|
|
lv_obj_set_style_bg_opa(scale_img, LV_OPA_COVER, 0);
|
|
lv_obj_set_style_bg_color(scale_img, lv_palette_lighten(LV_PALETTE_RED, 5), 0);
|
|
lv_obj_set_style_radius(scale_img, LV_RADIUS_CIRCLE, 0);
|
|
lv_obj_set_style_clip_corner(scale_img, true, 0);
|
|
lv_obj_align(scale_img, LV_ALIGN_RIGHT_MID, LV_PCT(-2), 0);
|
|
|
|
lv_scale_set_label_show(scale_img, true);
|
|
|
|
lv_scale_set_total_tick_count(scale_img, 31);
|
|
lv_scale_set_major_tick_every(scale_img, 5);
|
|
|
|
lv_obj_set_style_length(scale_img, 5, LV_PART_ITEMS);
|
|
lv_obj_set_style_length(scale_img, 10, LV_PART_INDICATOR);
|
|
lv_scale_set_range(scale_img, 10, 40);
|
|
|
|
lv_scale_set_angle_range(scale_img, 270);
|
|
lv_scale_set_rotation(scale_img, 135);
|
|
|
|
/* image must point to the right. E.g. -O------>*/
|
|
needle_img = lv_img_create(scale_img);
|
|
lv_image_set_src(needle_img, &img_hand);
|
|
lv_obj_align(needle_img, LV_ALIGN_CENTER, 47, -2);
|
|
lv_image_set_pivot(needle_img, 3, 4);
|
|
|
|
lv_anim_t anim_scale_img;
|
|
lv_anim_init(&anim_scale_img);
|
|
lv_anim_set_var(&anim_scale_img, scale_img);
|
|
lv_anim_set_exec_cb(&anim_scale_img, set_needle_img_value);
|
|
lv_anim_set_duration(&anim_scale_img, 1000);
|
|
lv_anim_set_repeat_count(&anim_scale_img, LV_ANIM_REPEAT_INFINITE);
|
|
lv_anim_set_playback_duration(&anim_scale_img, 1000);
|
|
lv_anim_set_values(&anim_scale_img, 10, 40);
|
|
lv_anim_start(&anim_scale_img);
|
|
}
|
|
|
|
#endif
|