添加自定义字体和物理按键

LittlevGL 添加自定义字体
获取字库 ttf 文件
可以从一些网站上获取字库文件,比如
请注意字体许可证

生成源文件
使用 LittlevGL 提供的字库文件转换工具,将 ttf 字库文件转换为源文件。
将生成的源文件添加到 LittlevGL 工程中,添加以下代码声明字体:
extern lv_font_t my_font_name;
1
或者

LV_FONT_DECLARE(my_font_name);
1
源代码中使用这个字体可以:

style.text.font = &my_font_name;
1
或者将这个字体添加到当前使用的字体中:

lv_font_add(&my_font_name, &current_use);
1
例如:

LV_FONT_DECLARE(my_font_name);

void lv_chinese_fonts1(void)
{
/*Concatenate the fonts into one*/
// lv_font_add(&arial_cyrillic_20, &arial_ascii_20); 相同高度才可以添加到一起
// lv_font_add(&arial_math_20, &arial_ascii_20);

/* 创建一个新的样式,并且修改新样式的文本字体 */
static lv_style_t style1;
lv_style_copy(&style1, &lv_style_plain);
style1.text.font = &my_font_name; /* 设置自定义字体 */

/*Create a label and set new text*/
lv_obj_t * label = lv_label_create(lv_scr_act(), NULL); /* 创建标签 */
lv_obj_set_pos(label, 10, 10); /* 设置相对位置 */
lv_label_set_style(label, &style1); /* 设置样式 */
lv_label_set_text(label, "Hello World!\n 世界你好,我是littleVGL!"); /* 显示汉字 */
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
LittlevGL 添加自定义符号
流程:

寻找合适的 ttf 文件(包含目标符号,可在 linux 下通过 FontForge 软件打开 ttf 文件,查看包含那些字符)
使用 LittlevGL 提供的字库文件转换工具,将选中的符号转换为 c 源文件。在转换的页面 Range 中输入目标符号的 Unicode 编码,怎么查询可以通过百度
将源文件添加到工程中,和上面添加字体类似,首先声明字体,然后添加到字体中或者直接使用。
定义一个宏指向这个目标符号,宏的内容需要为 UTF-8编码,通过 Unicode和UTF编码转换 可以进行转换
例如:
这样就需要在程序中:

/* MACROS */
#define SYMBOL_TEMP "\xE2\x84\x83" // E28483

/* STATIC VARIABLES */
LV_FONT_DECLARE(tempreture_symbol_40);

/* Add font to current font */
lv_font_add(&tempreture_symbol_40, &lv_font_dejavu_40);

/* Use this symbol */
lv_label_set_text(temp_l, "21.5 "SYMBOL_TEMP);
1
2
3
4
5
6
7
8
9
10
11
LittlevGL 添加物理按键
注册物理按键驱动:

uint8_t my_btn_read()
{
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == 0)
{
return 1;
}
else
{
return 0;
}
}
bool my_input_read(lv_indev_data_t *data)
{
static int8_t last_btn = 0; /* Store the last pressed button */
int8_t btn_pr = my_btn_read(); /* Get the ID (0,1,2...) of the pressed button */

if (btn_pr > 0)
{ /* Is there a button press? */
last_btn = btn_pr; /* Save the ID of the pressed button */
data->state = LV_INDEV_STATE_PR; /* Set the pressed state */
}
else
{
data->state = LV_INDEV_STATE_REL; /* Set the released state */
}

data->btn = last_btn; /* Set the last button */

return false; /* No buffering so no more data read */
}
void my_button_init(void)
{
static lv_indev_t *indev;
lv_indev_drv_t indev_drv;

lv_indev_drv_init(&indev_drv);

indev_drv.read = my_input_read;
indev_drv.type = LV_INDEV_TYPE_BUTTON;
indev = lv_indev_drv_register(&indev_drv);

/*points_array: these points will be assigned to the buttons to press a specific point on the screen.*/
static lv_point_t points_array[] = {{20, 20}};
lv_indev_set_button_points(indev, points_array);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
创建一个按键,保证上面的点在按钮的区域内:

static lv_obj_t *btn = lv_btn_create(lv_scr_act(), NULL);
lv_obj_set_size(btn, 40, 40);
lv_obj_set_pos(btn, 0, 0);
lv_btn_set_action(btn, LV_BTN_ACTION_CLICK, btn_click_action);
---------------------

原文地址:https://www.cnblogs.com/ly570/p/11044523.html

时间: 2024-10-29 04:41:49

添加自定义字体和物理按键的相关文章

IOS添加自定义字体

准备: 字体文件(.ttf,.odf) 方法1: 添加对应的字体(.ttf或.odf)到工程的resurce,使用cocos2d中的FontLabel库,FontLabel继承于UILabel,象UILabel一样使用就好了 fontName直接使用添加的资源名字即可 方法2: 1.添加对应的字体(.ttf或.odf)到工程的resurce,例如my.ttf 2.在info.plist中添加一项 Fonts provided by application (item0对应的value为my.tt

宏-新项目物理按键不能用

这几次移植代码的时候,经常发现三个物理按键不起效果,后来发现是快捷手电筒引起的.解决的思路很简单,就是把快捷手电筒关掉,解决方法有两个 1.把宏关掉.这个操作起来稍微麻烦一些,因为你关掉了宏以后,还必须重新编译,而且,因为可能有patch,所以你要关好几处的宏.如下 1)关掉ProjectConfig.mk.global中的宏 [email protected]7817:~/PROJECT/PROJECT_V5/52_kk_qhd_k25$ cd mediatek/config/common/

彩扩机项目--两个状态指示灯,巧妙的使用二极管的特性,以及物理按键的滤波

对于物理按键,按下和弹起时,会发生较大的电源波动,从而使得后面的三极管产生波动,使用电阻和电容可以将电压得变化变平缓. 左图是没有使用电阻和电容滤波,按键产生的电压波动.右图是使用电阻和电容滤波后的电压.通过调整电阻和电容的值可以改变图示时间t,一般选取时间为5us 因为散热马达转动时,红色LED亮,所以红色LED和散热马达并联. 为了使红色LED灯亮,而绿色LED灯灭,使用了一个二极管,当二极管导通时,绿色LED灯两端电压为1.7V,不足以点亮绿色LED.

关于Android中物理按键不响应的可能的一个问题。

今天在工作中犯了一个错误,写的视频播放器突然物理音量键就不起作用了.一开始以为是自定义的音量条把系统的物理音量条按键给屏蔽掉了.删除自定义的音量条还是不行,又怀疑是是添加了什么权限之类的,反复尝试都不是那些原因.最后发现是onKeyDown物理按键的监听事件的问题!!!重新onKeyDown方法的时候,我竟然鬼使神差的返回true!!!返回true的意思是不是back按钮的都不继续往下传递响应,就是这里的原因.改成return false就好了.以此为戒,谨记谨记!!! 版权声明:本文为博主原创

android4.0下如何判断手机是否有底部物理按键(menu物理按键)

某些手机底部是在触摸屏内部有软按键,就是如(back,home,menu 等)而有的手机底部(非屏幕内部)有物理按键,就是生产厂商不愿意有google自带的虚拟按键,而做的电容式的物理按键,如(back,home,menu 等)android4.0下可以用此判断是否有物理按键:ViewConfiguration.get(this).hasPermanentMenuKey(); android4.0下如何判断手机是否有底部物理按键(menu物理按键),布布扣,bubuko.com

Android 物理按键

1 import android.app.Activity; 2 import android.os.Bundle; 3 import android.util.Log; 4 import android.view.KeyEvent; 5 import android.widget.Toast; 6 7 public class MainActivity extends Activity { 8 9 10 @Override 11 protected void onCreate(Bundle s

Android学习笔记之,调用系统图库,添加自定义字体,屏幕截图

新年开始的第一天就来学习了慕课迎春活动中的Android心愿分享一课,学到了几个知识点,在此记录一下. 1.调用系统图库调用系统图库用的是intent,步骤为弹出系统图库选择器,选择图片后获取到所选择的图片.代码如下: //在需要的地方调用 Intent intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/

Android系统移植与调试之------->增加一个双击物理按键打开和关闭闪光灯并将闪光灯状态同步到下拉菜单中

最近有一个客户有这样的需求: 1.在[设置]--->[无障碍]中添加一个开关按钮. 如果打开开关的话,双击某个物理按键的时候,打开闪光灯,再双击该物理按键的时候,关闭闪光灯. 如果关闭开关的话,双击该物理按键的时候,不做任何处理. 2.打开关闭闪光灯的状态,在下拉菜单中也要同步. 如下图所示的效果: 当打开上面添加的开关后,如果双击POC键(POC键是我们公司自定义的一个物理按键)的时候,就打开闪光灯,并将下拉菜单中的闪光灯图标点亮,如下图所示 如果再次双击POC键(POC键是我们公司自定义的一

cocos2d-x之监听手机的物理按键

1 //如何监听按键事件 2 //创建物理按键的监听事件 3 auto listener = EventListenerKeyboard::create(); 4 //按键被释放时执行的操作,EventKeyboard::KeyCode表示按键代码 5 listener->onKeyReleased = [](EventKeyboard::KeyCode code,Event *e){ 6 log("Key Code : %d",code);//显示按键的值 7 //按下后退键关