Languages

Menu
Sites
Language
이미지 버튼 생성 질문드립니다.

현재 gear s2에 native 애플리케이션을 개발하고 있습니다.

버튼에 이미지를 입히기 위해 아래와 같은 코드를 작성하였습니다.

 

Evas_Object *box=elm_box_add(ad->win);
    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND,EVAS_HINT_EXPAND);
    elm_object_content_set(ad->conform, box);
    evas_object_show(box);
    ad->btn = elm_button_add(box);
    ad->img =elm_image_add(ad->btn);
    elm_image_file_set(ad->img, ICON_DIR"/EFL_img.png", NULL);
    elm_image_resizable_set(ad->img, EINA_TRUE,EINA_TRUE);
    elm_object_part_content_set(ad->btn, "icon", ad->img);
    evas_object_size_hint_min_set(ad->btn,ELM_SCALE_SIZE(360), ELM_SCALE_SIZE(360)); //개체 크기 조절
    evas_object_smart_callback_add(ad->btn, "clicked", gl_selected_cb, ad->conform);

    evas_object_show(ad->btn);
    elm_box_pack_end(box, ad->btn);

 

버튼의 크기는 화면전체 크기와 같아지지만 이미지의 크기는 자동으로 아주 작게 변경되고 있습니다. 큰 이미지를 넣어도 이미지의 크기가 변경이 되지 않고있습니다.

elm_image_resizable_set이 부분을 elm_image_resizable_set(ad->img, EINA_FALSE,EINA_FALSE); 로 수정하면, 이미지가 잘려서 버튼에 들어가게 됩니다.

해결방안에 대해 질문을 올립니다.

Responses

14 Replies
BeomChan Park

큰 이미지를 넣어도 이미지의 크기가 변경이 안된다는게 자동으로 리사이징 된다는 뜻인가요?

재규 신

네 맞습니다.

BeomChan Park

어떻게 해결하고 싶다는건지를 알려주셔야 할 것 같습니다.

http://blog.naver.com/hermet/220222583873

참고 자료입니다.

재규 신

먼저 일단 해결방안에 대해 언급은 안해서 죄송합니다.

그리고 참고 자료 감사합니다.

 

이미지가 리사이즈되지 않고  원래의 이미지 크키가 버튼안에 들어가기를 원하고 있습니다.

BeomChan Park

큰 이미지를 넣어도 이미지의 크기가 변경이 안된다는게 자동으로 리사이징 된다는 뜻인가요?

woochan lee

안녕하세요.

 

Tizen_2.3.1 style 가이드를 보면 default 스타일 버튼에 "icon" 영역은 존재하고 있지 않습니다.

아직 특정 위젯의 bg를 이미지로 할 수 있는 스마트한 방법이 없는 상태입니다. 3.0이후에 좋아지겠죠?;

 

button theme을 customizing 하시거나, image 오브젝트에 evas_event_callback을 걸어서 버튼처럼

사용하실수 있을것 같은데요. 정확한 요구사항이 어떤건지 몰라 이정도까지만 가이드 드립니다.

 

추가로 질문주시면 답변해드리도록 하겠습니다~

 

 

재규 신

먼저 좋은 답변 감사합니다.

먼저 일단 해결방안에 대해 언급은 안해서 죄송합니다.

 

이미지가 리사이즈되지 않고  원래의 이미지 크키가 버튼안에 들어가기를 원하고 있습니다.

woochan lee

안녕하세요.

 

이미지가 리사이즈 되지 않고 버튼의 크기 만큼 버튼의 bg로 들어가기를 원하신다면

button theme을 customizing 하셔야 합니다 ㅠ framework에서 지원하는 스타일이 아닌 경우

현재 스마트한 방법없이 theme customizing 하셔야 합니다ㅠ (추후 개선될 내용입니다.)

SDK에 포함된 button customizing 가이드를 참고해주시고 edc구현중 어려움이 있으시면

efl.or.kr에서 자료 참고하시거나 추가 질문해주시면 답변 해드리겠습니다.

재규 신

넵 좋은 정보 감사드립니다.

Junho Lee

항상 인생에는 Plan B가 있죠.....

정석은 위에 말씀하신 것처럼 theme을 custom 하시는 거구요..

아니면 버튼의 BG 이미지를 바꾸는 대신, 역으로 이미지를 만들고 그 위에 투명한 버튼을 붙이는 방법도 있습니다.

...

static void resize_and_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
    appdata_s *ad = data;
    int x,y,w,h;
    evas_object_geometry_get(obj, &x, &y, &w, &h);
    evas_object_move(ad->button, x, y);
    evas_object_resize(ad->button, w, h);

}

...

    Evas_Object *img = elm_image_add(ad->win);
    elm_image_file_set(img, eina_strbuf_string_get(strbuf), NULL);
    evas_object_resize(img, 100, 100);
    evas_object_move(img, 100, 100);
    evas_object_show(img);
    evas_object_event_callback_add(img, EVAS_CALLBACK_RESIZE, resize_and_move_cb, ad);
    evas_object_event_callback_add(img, EVAS_CALLBACK_MOVE, resize_and_move_cb, ad);

    Evas_Object *button = elm_button_add(ad->win);
    int x,y,w,h;
    evas_object_geometry_get(img, &x, &y, &w, &h);
    evas_object_resize(button, w, h);
    evas_object_move(button, x, y);

    evas_object_smart_callback_add(button, "clicked", clicked_cb, ad);
    elm_object_style_set(button, "focus");
    evas_object_show(button);
    ad->button = button;

...

핵심은 버튼의 "focus" 스타일을 적용하여 버튼을 투명하게 맞는 것입니다.

EDC를 사용하시면 코드의 양이 좀 줄어듭니다.

위의 코드는 C코드에서 처리하는 방법입니다.

재규 신

많은 팁이 되었습니다.

 

정말 감사합니다.

Junho Lee

참고로 이거 Gear S1, S2 실제 디바이스에서만 됩니다.

"focus"라는 스타일이 Public style이 아니라 emulator에서는 안되구요.

Song Yochan

button의 edc 내에서 "icon" 영역 크기를 수정하셔야합니다.

만일 "icon" 영역이 없다면 아래와 같이 part를 추가해주셔야합니다.

 

part {

name: "icon";

scale: 1;

type: SWALLOW;

description {

state: "default" 0.0;

}

}

재규 신

넵 감사합니다.