步骤条实现滑动

/*
 * Project: linux-kit
 * Module: common
 * File: common.c
 * Created Date: 2023-03-17 17:51:06
 * Author: wangshuqiang
 * Description: common file
 * -----
 * todo: modified
 * -----
 * Copyright (c) 2023 - vDiscovery, Inc
 */
/* ======================================================================================
 * log
 */
#include <src/core/lv_disp.h>
#include <src/core/lv_obj.h>
#include <src/widgets/lv_roller.h>
#include <stdio.h>

#include "base_type.h"
#include "src/core/lv_obj.h"
#include "src/core/lv_obj_pos.h"
#include "src/core/lv_obj_tree.h"
#include "vd_log.h"
#define LOG_ENABLE_DEBUG (1)
/* ======================================================================================
 * includes
 */
// #include "app_video1.h"
#include "base.h"
#include <math.h>

#include "app_src_common.h"
#include "lvgl.h"
#include "src/resource/app_resource.h"
// #include "lvgl_json.h"
// #include "src/resource/app_resource.h"
/* ======================================================================================
 * macros
 */
// 步进条相关
#define COMMON_STEPPER_STRIP_LENGTH 72    // 长条宽度
#define COMMON_STEPPER_POINT_LENGTH 10    // 圆点宽度
#define COMMON_STEPPER_GAP_HOME 35        // 距离
#define COMMON_STEPPER_GAP_AUTO_SELECT 15 // 距离
/* ======================================================================================
 * types
 */
/* ======================================================================================
 * declaration
 */
const char *tips_img_dscaddr[] = {
    APP_LZO_IMG_PATH "strip" APP_PIC_FORMAT,
    APP_LZO_IMG_PATH "black_point" APP_PIC_FORMAT,
};
/* ======================================================================================
 * globals
 */
static lv_obj_t *tips_obj = vd_null;

static lv_obj_t *image_data[255] = {0};
/* ======================================================================================
 * helper
 */
static uint32_t old_step_id = 0;
static uint32_t menu_id = 0;
static uint32_t steps_count = 0;

static uint32_t steps_start_x = 0;
static uint32_t common_stepper_gap = 35;

static lv_area_t old_coords = {0};
static lv_area_t new_coords = {0};
static lv_anim_t a1;
static lv_anim_t a2;
static lv_anim_t a3;
static lv_anim_t a4;
/* ======================================================================================
 * private implementation
 */
/* ======================================================================================
 * implementation
 */

static vd_void_t app_common_stepper_anim_callback(void *var, int value) {
  lv_obj_set_x(var, value);
}

/**
 * @Date: 2024-07-23 20:24:53
 * @Function: app_common_stepper_create
 * @Description: 创建步骤进度条
 * @Param: steps_count_data 步骤总数
 * @Return:
 * @param {lv_obj_t} *obj
 * @param {vd_int32_t} steps_count_data
 */
lv_obj_t *app_common_stepper_create(lv_obj_t *obj, vd_int32_t steps_count_data,
                                    step_anim_mode_e mode) {
  steps_count = steps_count_data;
  if (mode == STEP_ANIM_MODE_E_HOME) {
    common_stepper_gap = COMMON_STEPPER_GAP_HOME;
    // 计算起始位置
#if 0
        800/2 屏幕中心
      所有控件的总长度/2(COMMON_STEPPER_STRIP_LENGTH+(steps_count-1)*common_stepper_gap+(steps_count-1)*COMMON_STEPPER_POINT_LENGTH)/2 总长度/2
#endif
    steps_start_x =
        800 / 2 -
        (COMMON_STEPPER_STRIP_LENGTH + (steps_count - 1) * common_stepper_gap +
         (steps_count - 1) * COMMON_STEPPER_POINT_LENGTH) /
            2;
  } else {
    // 计算间距
    common_stepper_gap = (800 - COMMON_STEPPER_STRIP_LENGTH) / (steps_count);

    // common_stepper_gap = COMMON_STEPPER_GAP_AUTO_SELECT;
#if 0
        800/2 屏幕中心
      所有控件的总长度/2(COMMON_STEPPER_STRIP_LENGTH+(steps_count-1)*common_stepper_gap+(steps_count-1)*COMMON_STEPPER_POINT_LENGTH)/2 总长度/2
#endif
    steps_start_x =
        (800 - common_stepper_gap * steps_count - COMMON_STEPPER_STRIP_LENGTH)/2;
  }
  tips_obj = lv_obj_create(obj); // 创建一个父控件obj
  lv_obj_remove_style_all(tips_obj);
  lv_obj_set_size(tips_obj, 800, 480);
  lv_obj_set_style_bg_opa(tips_obj, LV_OPA_0, LV_PART_MAIN);
  lv_obj_set_style_bg_color(tips_obj, lv_color_black(), LV_PART_MAIN);
  lv_obj_set_style_border_width(tips_obj, 0, LV_PART_MAIN);
  lv_obj_set_pos(tips_obj, 0, 0);

  // 向父控件内添加子控件
  for (int i = 1; i < steps_count; i++) {
    lv_obj_t *icon_img = lv_img_create(tips_obj);
    image_data[i] = icon_img;
    lv_img_set_src(icon_img, (tips_img_dscaddr[1]));
    lv_obj_set_pos(icon_img,
                   i * common_stepper_gap + steps_start_x +
                       COMMON_STEPPER_STRIP_LENGTH,
                   450);
  }
  lv_obj_t *icon_img = lv_img_create(tips_obj);
  image_data[0] = icon_img;
  lv_img_set_src(icon_img, (tips_img_dscaddr[0]));
  lv_obj_set_pos(icon_img, steps_start_x, 450);
  return tips_obj;
}

vd_void_t app_common_stepper_set_current_step(int32_t current_step) {
  menu_id = current_step;
  // 新选项大于旧选项时处理
  if (old_step_id < menu_id) {
    // 当前是第一个选项,左旋切换到最后一个选项时处理
    if (old_step_id == 0 && menu_id == steps_count - 1) {
      lv_obj_get_coords(image_data[0], &old_coords);
      lv_obj_get_coords(image_data[steps_count - 1], &new_coords);
      lv_anim_init(&a3);
      lv_anim_set_exec_cb(&a3, app_common_stepper_anim_callback);
      lv_anim_set_var(&a3, image_data[0]);
      lv_anim_set_values(&a3, old_coords.x1,
                         new_coords.x1 - COMMON_STEPPER_STRIP_LENGTH);
      lv_anim_set_time(&a3, 200);
      lv_anim_start(&a3);
      for (int i = 1; i <= steps_count - 1; i++) {
        lv_obj_get_coords(image_data[i], &new_coords);
        static lv_anim_t a5;
        lv_anim_init(&a5);
        lv_anim_set_exec_cb(&a5, app_common_stepper_anim_callback);
        lv_anim_set_var(&a5, image_data[i]);
        lv_anim_set_values(
            &a5, new_coords.x1,
            new_coords.x1 - common_stepper_gap -
                COMMON_STEPPER_STRIP_LENGTH); // 10为圆点宽度 72长条宽度
                                              // 35位控件距离
        lv_anim_set_time(&a5, 200);
        lv_anim_start(&a5);
      }
    } // 选项依次递增的处理
    else {
      lv_obj_get_coords(image_data[0], &old_coords);
      lv_obj_get_coords(image_data[menu_id], &new_coords);

      lv_anim_init(&a3);
      lv_anim_set_exec_cb(&a3, app_common_stepper_anim_callback);
      lv_anim_set_var(&a3, image_data[0]);
      lv_anim_set_values(&a3, old_coords.x1,
                         old_coords.x1 + common_stepper_gap);
      lv_anim_set_time(&a3, 200);

      lv_anim_init(&a4);
      lv_anim_set_exec_cb(&a4, app_common_stepper_anim_callback);
      lv_anim_set_var(&a4, image_data[menu_id]);
      lv_anim_set_values(&a4, new_coords.x1, old_coords.x1);
      lv_anim_set_time(&a4, 200);

      lv_anim_start(&a3);
      lv_anim_start(&a4);
    }
  } // 新选项小于旧选项时处理
  else {
    // 当前是最后1个选项,右旋切换到第一个选项时处理
    if (old_step_id == steps_count - 1 && menu_id == 0) {
      lv_obj_get_coords(image_data[0], &old_coords);
      lv_obj_get_coords(image_data[1], &new_coords);
      lv_anim_init(&a3);
      lv_anim_set_exec_cb(&a3, app_common_stepper_anim_callback);
      lv_anim_set_var(&a3, image_data[0]);
      lv_anim_set_values(&a3, old_coords.x1, steps_start_x);
      lv_anim_set_time(&a3, 200);
      lv_anim_start(&a3);
      for (int i = 1; i <= steps_count - 1; i++) {
        lv_obj_get_coords(image_data[i], &new_coords);
        static lv_anim_t a5;
        lv_anim_init(&a5);
        lv_anim_set_exec_cb(&a5, app_common_stepper_anim_callback);
        lv_anim_set_var(&a5, image_data[i]);
        lv_anim_set_values(&a5, new_coords.x1,
                           steps_start_x + COMMON_STEPPER_STRIP_LENGTH +
                               common_stepper_gap *
                                   i); // 10为圆点宽度 72长条宽度 35位控件距离
        lv_anim_set_time(&a5, 200);
        lv_anim_start(&a5);
      }
    } else {
      if (old_step_id != menu_id) {
        lv_obj_get_coords(image_data[0], &old_coords);
        lv_obj_get_coords(image_data[old_step_id], &new_coords);

        lv_anim_init(&a3);
        lv_anim_set_exec_cb(&a3, app_common_stepper_anim_callback);
        lv_anim_set_var(&a3, image_data[0]);
        lv_anim_set_values(&a3, old_coords.x1,
                           old_coords.x1 - common_stepper_gap);
        lv_anim_set_time(&a3, 200);

        lv_anim_init(&a4);
        lv_anim_set_exec_cb(&a4, app_common_stepper_anim_callback);
        lv_anim_set_var(&a4, image_data[old_step_id]);
        lv_anim_set_values(
            &a4, new_coords.x1,
            new_coords.x1 + COMMON_STEPPER_STRIP_LENGTH + common_stepper_gap -
                COMMON_STEPPER_POINT_LENGTH); // 10为圆点宽度 72长条宽度
                                              // 35位控件距离
        lv_anim_set_time(&a4, 200);
        lv_anim_start(&a3);
        lv_anim_start(&a4);
      } else {
        if (menu_id == 0) {
        } else {
          for (int i = 1; i <= menu_id; i++) {
            lv_obj_set_pos(image_data[0],
                           steps_start_x + common_stepper_gap * i, 450);
            lv_obj_set_pos(image_data[i],
                           steps_start_x + common_stepper_gap * (i - 1), 450);
          }
        }
      }
    }
  }
  old_step_id = menu_id;
}

vd_void_t app_common_stepper_current_step_destroy() {
  old_step_id = 0;
  menu_id = 0;
  // steps_start_x = 0;
  if (tips_obj != NULL) {
    lv_obj_del(tips_obj);
    tips_obj = NULL;
  }
}

主菜单滑动实现:


/*
 * Project: vdtools
 * Module: module_name
 * File: Untitled-1
 * Created Date: 2024-07-22 10:36:32
 * Author: vdtools
 * Description: description
 * -----
 * todo: modified
 * -----
 * Copyright (c) 2021 - vDiscovery, Inc
*/

/* ======================================================================================
 * log
 */
#include "lv_anim.h"
#include "lv_area.h"
#include "src/core/lv_disp.h"
#include "src/core/lv_obj.h"
#include "src/core/lv_obj_pos.h"
#include <stdio.h>
#define LOG_ENABLE_DEBUG (1)

/* ======================================================================================
 * includes
 */
#include "app_manual_cooking.h"
#include "base.h"
#include "lvgl.h"
#include "lvgl_json.h"
#include "src/resource/app_resource.h"

/* ======================================================================================
 * macros
 */
#define MENU_NUM 6

/* ======================================================================================
 * types
 */


/* ======================================================================================
 * declaration
 */

vd_void_t app_manual_cooking_on_create(lv_obj_t* scr, app_scr_info_t data);
vd_void_t app_manual_cooking_on_update(lv_obj_t* scr, app_scr_info_t data);
vd_void_t app_manual_cooking_on_destroy(lv_obj_t* scr);

/* ======================================================================================
 * globals
 */
static  lv_obj_t* menu_bg_img   = vd_null;
static lv_obj_t* container   = vd_null;
static lv_obj_t* btn_recipe  = vd_null;
static lv_obj_t* tabview     = vd_null;
static lv_obj_t* tips_obj    = vd_null;

static lv_obj_t* obj_data[15]   = {0};
static lv_obj_t* label_data[15] = {0};
static lv_obj_t* image_data[15] = {0};
static uint32_t  menu_id        = 0;
static uint32_t  old_menu_id    = 0;
static uint32_t  last_menu_id    = 0;
static uint32_t  last_pos_x1        = 299;
static uint32_t  last_pos_x2        = 396;

static lv_anim_t a1;
static lv_anim_t a2;
static lv_anim_t a3;
static lv_anim_t a4;

static lv_area_t old_coords={0};
static 	lv_area_t new_coords={0};
static 	lv_area_t last_coords={0};
const char* guide_img_dscaddr[] = {
	APP_LZO_IMG_PATH"olive"APP_PIC_FORMAT,
	APP_LZO_IMG_PATH"orange"APP_PIC_FORMAT,
	APP_LZO_IMG_PATH"cookie_bowl"APP_PIC_FORMAT,
 	APP_LZO_IMG_PATH"pesto"APP_PIC_FORMAT,
	APP_LZO_IMG_PATH"eggs"APP_PIC_FORMAT,	
	APP_LZO_IMG_PATH"eggs"APP_PIC_FORMAT,
};
const char*mode_img_dscaddr[] = {
	APP_LZO_IMG_PATH"component_98_1"APP_PIC_FORMAT,
	APP_LZO_IMG_PATH"component_100_1"APP_PIC_FORMAT,
 	APP_LZO_IMG_PATH"component_102_1"APP_PIC_FORMAT,
	APP_LZO_IMG_PATH"component_104_1"APP_PIC_FORMAT,
	APP_LZO_IMG_PATH"component_112_1"APP_PIC_FORMAT,
	APP_LZO_IMG_PATH"component_114_1"APP_PIC_FORMAT,
	};

uint32_t x_pos[MENU_NUM] = {
    568,
    569,
    594,
    632,
    521,
    -100,
};
uint16_t y_pos[MENU_NUM]   = {180, 323, 217, 130, 148, 148,};
char*    buf_txt[MENU_NUM] = {
    "MANUEL\nPİŞİRME",
    "OTOMATİK\nPİŞİRME",
    "OZEL\nFONKSIYON",
    "KADEMELI\nPISIRME",
    "SON\nKULLANLAN",
    "AYARLAR",
};



/* ======================================================================================
 * helper
 */

/* ======================================================================================
 * private implementation
 */

static void set_pos_x_label(void* bar, int32_t value) {
    lv_obj_set_x(bar, value);
}

void lv_obj_anim_ready_cb(lv_anim_t* a) {

    lv_obj_scroll_to_view(lv_obj_get_child(container, menu_id), LV_ANIM_ON);
    // lv_obj_t* old_child1 = lv_obj_get_child(container, old_menu_id);
    // lv_obj_t* new_child1 = lv_obj_get_child(container, menu_id);
    // lv_obj_set_style_width(old_child1, 85, 0);
    // lv_obj_set_style_width(new_child1, 357, 0);
}

static void lv_obj_anim_start_cb(lv_anim_t* a) {

    lv_tabview_set_act(tabview, menu_id, LV_ANIM_ON);
    lv_obj_set_scroll_snap_x(container, LV_SCROLL_SNAP_CENTER);
}
static void set_weight_label(void* bar, int32_t value) {
    lv_obj_set_style_width(bar, value, 0);

    lv_obj_add_flag(label_data[old_menu_id], LV_OBJ_FLAG_HIDDEN);
    lv_obj_clear_flag(label_data[menu_id], LV_OBJ_FLAG_HIDDEN);
}

static void set_x(void* bar, int32_t value) {
    lv_obj_set_x(bar, value);
}
/* ======================================================================================
 * implementation
 */

vd_void_t app_manual_cooking_on_create(lv_obj_t* scr, app_scr_info_t data) {
	lv_json_bind(scr, APP_LAYOUT_MANUAL_COOKING_JSON_STR);

	menu_bg_img = lv_json_find_widget(scr, APP_ID_MANUAL_COOKING_MENU_BG_IMG);
    lv_img_set_src(menu_bg_img,  APP_LZO_IMG_PATH "default_bkg" APP_PIC_FORMAT);

    tabview = lv_tabview_create(menu_bg_img, LV_DIR_TOP, 50);
    lv_obj_set_style_bg_opa(tabview, LV_OPA_TRANSP, APP_DEFAULT_SELECTOR);

    lv_obj_t* btns = lv_tabview_get_tab_btns(tabview);
    lv_obj_set_style_size(btns, 0, 0);
    lv_obj_set_size(tabview, LV_HOR_RES+120, LV_VER_RES);
    //创建全局状态栏
    app_common_statusbar_create();

    for (int i = 0; i < MENU_NUM; i++) {
        lv_obj_t* tab1 = lv_tabview_add_tab(tabview, "");
        lv_obj_set_scrollbar_mode(tab1, LV_SCROLLBAR_MODE_OFF);
        lv_obj_set_scroll_dir(tab1, LV_DIR_VER);
        lv_obj_t* img1 = lv_img_create(tab1);
        lv_img_set_src(img1, (guide_img_dscaddr[i]));
        lv_obj_set_pos(img1, x_pos[i], y_pos[i]);
    }

    container = lv_obj_create(menu_bg_img);  //创建一个父控件obj
    lv_obj_set_size(container, LV_HOR_RES, LV_VER_RES-40);
    lv_obj_set_scrollbar_mode(container, LV_SCROLLBAR_MODE_OFF);
    lv_obj_set_scroll_dir(container, LV_DIR_HOR);       //设置滚动方向
    lv_obj_set_flex_flow(container, LV_FLEX_FLOW_ROW);  //设置布局
    lv_obj_set_flex_align(container, LV_FLEX_ALIGN_CENTER, LV_SCROLL_SNAP_CENTER, LV_SCROLL_SNAP_CENTER);
    lv_obj_set_scroll_snap_x(container, LV_SCROLL_SNAP_CENTER);
	lv_obj_set_style_pad_all(container, 0, 0);
    lv_obj_set_style_bg_opa(container, LV_OPA_0, LV_PART_MAIN);
    lv_obj_set_style_bg_color(container, lv_color_black(), LV_PART_MAIN);
    lv_obj_set_style_border_width(container, 0, LV_PART_MAIN);
    lv_obj_set_style_pad_column(container, 10, LV_PART_MAIN);  // 图标之间的间隙
    lv_obj_set_pos(container, 0, 40);

    // 向父控件内添加子控件
    for (int i = 0; i < MENU_NUM; i++) {
        btn_recipe  = lv_obj_create(container);
        obj_data[i] = btn_recipe;
        lv_obj_remove_style_all(btn_recipe);
        lv_obj_set_style_border_width(btn_recipe, 0, 0);
        lv_obj_set_style_pad_all(btn_recipe, 0, 0);
        lv_obj_set_style_bg_color(btn_recipe, lv_color_hex(0x888888), LV_PART_MAIN);
        lv_obj_set_style_bg_opa(btn_recipe, LV_OPA_60, LV_PART_MAIN);
        lv_obj_set_style_radius(btn_recipe, 10, 0);
        if (i == 0) {
            lv_obj_set_size(btn_recipe, 357, 336);
        } else {
            lv_obj_set_size(btn_recipe, 85, 336);
        }

        lv_obj_align(btn_recipe, LV_ALIGN_CENTER, 0, 96);

        lv_obj_t* mode_img = lv_img_create(btn_recipe);
        lv_img_set_src(mode_img, (mode_img_dscaddr[i]));
        lv_obj_align(mode_img, LV_ALIGN_TOP_RIGHT, -10, 20);

        lv_obj_t* label1 = lv_label_create(btn_recipe);
        label_data[i]    = label1;
        lv_label_set_text_fmt(label1, "%s", buf_txt[i]);
        lv_obj_set_style_text_font(label1, g_leaguespartan_bold_42.font, LV_PART_MAIN);
        lv_label_set_recolor(label1, true);
        lv_label_set_long_mode(label1, LV_LABEL_LONG_WRAP);
        lv_obj_set_style_text_color(label1, lv_color_hex(0xffffff), LV_PART_MAIN);
        lv_obj_set_style_text_align(label1, LV_TEXT_ALIGN_CENTER, 0);
        lv_obj_align(label1, LV_ALIGN_BOTTOM_MID, 0, 0);

        lv_obj_add_flag(label1, LV_OBJ_FLAG_HIDDEN);
        if (i == 0) {
            lv_obj_clear_flag(label1, LV_OBJ_FLAG_HIDDEN);
        }
    }

    lv_obj_scroll_to_view(lv_obj_get_child(container, 0), LV_ANIM_OFF);
    lv_obj_add_flag(container, LV_OBJ_FLAG_SCROLL_MOMENTUM);
	#if DEF_TEST
		app_common_stepper_create(lv_scr_act(),MENU_NUM,STEP_ANIM_MODE_E_HOME);
	#else
		tips_obj = lv_obj_create(lv_scr_act());  //创建一个父控件obj
		lv_obj_set_size(tips_obj, 250, 20);
		lv_obj_set_scrollbar_mode(tips_obj, LV_SCROLLBAR_MODE_OFF);
		lv_obj_set_scroll_dir(tips_obj, LV_DIR_HOR);       //设置滚动方向
		lv_obj_set_flex_flow(tips_obj, LV_FLEX_FLOW_ROW);  //设置布局
		lv_obj_set_flex_align(tips_obj, LV_FLEX_ALIGN_CENTER, LV_SCROLL_SNAP_CENTER, LV_SCROLL_SNAP_CENTER);
		lv_obj_set_scroll_snap_x(tips_obj, LV_SCROLL_SNAP_CENTER);
		lv_obj_set_style_bg_opa(tips_obj, LV_OPA_0, LV_PART_MAIN);
		lv_obj_set_style_bg_color(tips_obj, lv_color_black(), LV_PART_MAIN);
		lv_obj_set_style_border_width(tips_obj, 0, LV_PART_MAIN);
		lv_obj_set_style_pad_column(tips_obj, 10, LV_PART_MAIN);  // 图标之间的间隙
		lv_obj_align(tips_obj, LV_ALIGN_BOTTOM_MID, 0, -19);

		// 向父控件内添加子控件
		for (int i = 0; i < MENU_NUM; i++) {
			lv_obj_t* icon_img = lv_img_create(tips_obj);
			image_data[i]      = icon_img;
			lv_img_set_src(icon_img, (tips_img_dscaddr[i]));
			lv_obj_align(icon_img, LV_ALIGN_CENTER, 0, 0);
		}
		lv_obj_scroll_to_view(lv_obj_get_child(tips_obj, 0), LV_ANIM_OFF);
		lv_obj_add_flag(tips_obj, LV_OBJ_FLAG_SCROLL_MOMENTUM);
	#endif
    if (data != NULL) {
        app_manual_cooking_on_update(scr, data);
    }
}

vd_void_t app_manual_cooking_on_update(lv_obj_t* scr, app_scr_info_t data) {
	 menu_info_t* menu = (menu_info_t*)data;
    menu_id           = menu->menu_info_id;
    //下一次更新到来,动画未运行完时,删除动画
    lv_anim_del_all();

    lv_anim_init(&a1);
    lv_anim_set_exec_cb(&a1, set_weight_label);
    lv_anim_set_time(&a1, lv_obj_get_scrollbar_anim_time());
    lv_anim_set_ready_cb(&a1, lv_obj_anim_ready_cb);
    lv_anim_set_start_cb(&a1, lv_obj_anim_start_cb);

    lv_anim_init(&a2);
    lv_anim_set_exec_cb(&a2, set_weight_label);
    lv_anim_set_time(&a2, lv_obj_get_scrollbar_anim_time());
    lv_anim_set_ready_cb(&a2, lv_obj_anim_ready_cb);
    lv_anim_set_start_cb(&a2, lv_obj_anim_start_cb);

    if (old_menu_id < menu_id) {
        lv_anim_set_var(&a1, obj_data[old_menu_id]);
        lv_anim_set_values(&a1, 357, 85);
        lv_anim_set_var(&a2, obj_data[menu_id]);
        lv_anim_set_values(&a2, 85, 357);
		//避免快速切换删除动画导致动画运行不完整
		if (old_menu_id>0) {
			lv_obj_set_style_width(obj_data[old_menu_id-1], 85, 0);
			lv_obj_set_style_width(obj_data[old_menu_id], 357, 0);
		}
    } else {
        lv_anim_set_var(&a1, obj_data[old_menu_id]);
        lv_anim_set_values(&a1, 357, 85);
        lv_anim_set_var(&a2, obj_data[menu_id]);
        lv_anim_set_values(&a2, 85, 357);
		//避免快速切换删除动画导致动画运行不完整
		if (old_menu_id<MENU_NUM-1) {
			lv_obj_set_style_width(obj_data[old_menu_id], 357, 0);
			lv_obj_set_style_width(obj_data[old_menu_id+1], 85, 0);
		}
    }
    lv_anim_start(&a1);
    lv_anim_start(&a2);

#if 1
	#if DEF_TEST
    app_common_stepper_set_current_step(menu_id);
	#else
	lv_obj_t* old_child = lv_obj_get_child(tips_obj, old_menu_id);
    lv_obj_t* new_child = lv_obj_get_child(tips_obj, menu_id);
	lv_obj_move_to_index(old_child, menu_id);
    lv_obj_scroll_to_view(lv_obj_get_child(tips_obj, menu_id), LV_ANIM_ON);
	#endif
#endif
    old_menu_id = menu_id;

}

vd_void_t app_manual_cooking_on_destroy(lv_obj_t* scr) {
	lv_anim_del_all();
    app_common_stepper_current_step_destroy();
}


/*
 * Project: linux-kit
 * Module:
 * File: app_manual_cooking.h
 * Created Date: 2024-07-22 10:36:32
 * Author: vdtools
 * Description: description
 * -----
 * todo: modified
 * -----
 * Copyright (c) 2021 - vDiscovery, Inc
 */
#ifndef APP_MANUAL_COOKING_H
#define APP_MANUAL_COOKING_H

/* ======================================================================================
 * includes
 */
#include "base.h"
#include "lvgl.h"
#include "src/resource/app_resource.h"
#include "../app_src_common.h"
#include <stdint.h>
/* ======================================================================================
 * extern
 */
__vd_extern_c_enter__;

/* ======================================================================================
 * macros
 */

#define DEF_TEST 1
/* ======================================================================================
 * types
 */


/* ======================================================================================
 * globals
 */

/* ======================================================================================
 * declaration
 */
typedef enum {
    HOME_PAGE_MODE_MANUAL,        // 手动模式
    HOME_PAGE_MODE_AUTO,          // 自动模式
    HOME_PAGE_MODE_SPECIAL,       // 特殊功能模式
    HOME_PAGE_MODE_STEP_COOKING,  // 多步骤烹饪
    HOME_PAGE_MODE_COLLECTION,    // 收藏模式
    HOME_PAGE_MODE_SETTING,       // 设置模式
    HOME_PAGE_MODE_MAX,           // 最大值
} menu_info_e;
typedef struct {
    menu_info_e menu_info_id;  // 屏幕正中显示的模式id
} menu_info_t;
/* ======================================================================================
 * extern
 */
__vd_extern_c_leave__
#endif // APP_MANUAL_COOKING_H

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值