0

我正在使用 EFL 库使用 Tizen Native 开发表盘。使用以下命令创建许多对象后:

Evas_Object *view_create_parts(Evas_Object *parent, const char *image_path,
    int position_x, int position_y, int size_w, int size_h) {
    Evas_Object *parts = NULL;

    parts = elm_image_add(parent);

    elm_image_file_set(parts, image_path, NULL);

    evas_object_move(parts, position_x, position_y);
    evas_object_resize(parts, size_w, size_h);

    evas_object_show(parts);

    return parts;
}

我想稍后根据需要更改一些现有对象的图像。这可能吗?我知道我还可以将所有可能的变体加载为单个对象并相应地显示/隐藏对象。但我发现只改变现有对象的图像更简单、更优雅。另外,这也可能使用更少的资源。

我试图这样做:

elm_image_file_set(<part_I_want_to_change_its_image>, "images/newimage.png", NULL));

但是,对象并没有更改为正确的图像,而是消失了。有任何想法吗?

4

3 回答 3

0

为了让某人能够跟随,我正在其中一个包含的样本“计时手表”上进行测试。在文件 view.c 中有函数view_chronograph_create_parts()。在这里,我所做的只是将代码从以下位置更改:

case PARTS_TYPE_HANDS_HOUR:
    s_info.hand_hour = part; // at this point, the image is already set
    break;

至:

case PARTS_TYPE_HANDS_HOUR:
    s_info.hand_hour = part; // at this point, the image is already set

    elm_image_file_set(s_info.hand_hour, "images/chrono_hand_min.png", NULL);

    // I tried these two lines as well, but no change
    evas_object_move(s_info.hand_hour, 166, 0);
    evas_object_resize(s_info.hand_hour, 28, 360);

    break;

这个想法是在最初设置后更改时针的图像,看看是否elm_image_file_set()成功更改了图像。但我得到的只是时针根本不可见。

于 2020-05-29T21:14:50.857 回答
0

是的,elm_image 支持图像转换。但是普通图像包含在容器小部件中或用作布局的一个区域,但在您的示例中,它似乎是画布上的一个孤立和绘制的图像。

在这种情况下,如果图像文件发生变化,旧的几何体就没有意义了,所以需要设置一个新的几何体值。在调用 elm_image_file_set 后执行以下操作。

evas_object_move(parts, position_x, position_y);
evas_object_resize(parts, size_w, size_h);
于 2020-05-28T23:32:05.750 回答
0

我终于发现我做错了什么。我不知道如何形成图像路径。非工作方式:

elm_image_file_set(s_info.hand_hour, "images/new_image.png", NULL);

工作方法:

char image_path[PATH_MAX] = { 0, };
data_get_resource_path("images/new_image.png", image_path, sizeof(image_path));
elm_image_file_set(s_info.hand_hour, image_path, NULL);
于 2020-06-02T03:18:24.833 回答