Objetos Básicos do LVGL (lv_obj)

2.1 Estrutura Pai-Filho

Um objeto pai serve como contêiner para seus objetos filhos. Com exceção da tela, todo objeto precisa ter exatamente um pai. Um pai pode conter quantos filhos forem necessários, e não há restrição quanto ao tipo do pai.

  • Quando o pai se move, seus filhos também se movem junto.
  • Se parte de um filho ultrapassar os limites do pai, essa parte não será visível.

Exemplo 1: Movimento sincronizado entre pai e filho


void interface_customizada(void) {
    lv_obj_t *container = lv_obj_create(lv_scr_act());
    lv_obj_set_size(container, 400, 240);

    lv_obj_t *bloco = lv_obj_create(container);
    lv_obj_set_pos(bloco, 50, 10);

    lv_obj_align(container, LV_ALIGN_CENTER, 0, 0);
}

Exemplo 2: Recorte de área fora do pai


void interface_customizada(void) {
    lv_obj_t *container = lv_obj_create(lv_scr_act());
    lv_obj_set_size(container, 400, 240);

    lv_obj_t *bloco = lv_obj_create(container);
    lv_obj_set_size(bloco, 200, 120);
    lv_obj_set_pos(bloco, -100, -60);
}

2.2 Criação e Exclusão de Objetos

Todos os objetos são criados com lv_obj_create(), especificando seu objeto pai. A exclusão pode ser feita com lv_obj_del(), ou adiada com lv_obj_del_async() para operações seguras em ambientes multitarefa.

2.3 Unidades de Medida

As dimensões no LVGL são medidas em pixels. Para tamanhos responsivos, pode-se usar LV_DPX() para ajustar valores conforme a densidade da tela.

2.4 Posicionamento

A posição de um objeto é definida em relação ao seu pai através de lv_obj_set_pos(). Para posicionamento relativo a outros elementos, use lv_obj_align() ou lv_obj_align_to().

2.5 Alinhamento

O alinhamento facilita o posicionamento relativo:


lv_obj_align(caixa, LV_ALIGN_CENTER, 0, 0);  // Centraliza o objeto

2.6 Dimensões

Define tamanho com:


lv_obj_set_width(caixa, 150);
lv_obj_set_height(caixa, 80);

Ou ambos com:


lv_obj_set_size(caixa, 150, 80);

2.7 Estilos

Estilos customizáveis controlam aparência visual:


lv_style_t estilo;
lv_style_init(&estilo);
lv_style_set_bg_color(&estilo, lv_color_hex(0xFF5733));
lv_style_set_border_width(&estilo, 2);
lv_style_set_border_color(&estilo, lv_color_black());

lv_obj_add_style(caixa, &estilo, 0);

2.8 Eventos

Objetos podem ter callbacks para eventos:


lv_obj_add_event_cb(botao, evento_clicado, LV_EVENT_CLICKED, NULL);

Com implementação do handler:


void evento_clicado(lv_event_t *e) {
    LV_LOG_USER("Botão foi clicado");
}

Tags: LVGL gui Embedded UI Object-Oriented C

Publicado em 10-18 03:42