【问题标题】:Can I change the image file of an existing Evas_Object?我可以更改现有 Evas_Object 的图像文件吗?
【发布时间】:2020-09-13 20:12:45
【问题描述】:

我正在使用 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));

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

【问题讨论】:

    标签: tizen tizen-wearable-sdk tizen-native-app efl


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢 Woochan Lee 的回答。我试过了,但没有用。我刚刚找到一个文档,上面写着:“你只需要为图像对象设置一个新的图像文件......”(来源:docs.tizen.org/application/native/guides/ui/efl/evas-rendering),但我一定做错了什么。我将在下面提出一个新问题来解释如何使用计时码表样品快速测试这一点。
    【解决方案2】:

    为了让人们能够跟进,我正在其中一个包含的样品“计时手表”上进行测试。在文件 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()是否成功更改图像。但我得到的只是时针根本看不到。

    【讨论】:

      【解决方案3】:

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

      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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        • 2018-05-03
        • 1970-01-01
        • 2021-12-17
        • 2020-03-21
        • 1970-01-01
        相关资源
        最近更新 更多