EFL ライブラリを使用して開発しているウォッチ フェイスにタッチ イベントを追加しようとしています。しかし、タッチレイヤーが機能していないか、機能している場合でも、透明である必要がありますが、時計の顔を完全に覆っています。
ウォッチ ウィンドウを作成する私のコードは次のとおりです。
Evas_Object *win = NULL;
int ret = EINA_FALSE;
/*
* Get watch window object
*/
ret = watch_app_get_elm_win(&win);
if (ret != APP_ERROR_NONE) {
dlog_print(DLOG_ERROR, LOG_TAG, "failed to get watch window. err = %d", ret);
return NULL;
}
evas_object_resize(win, width, height);
/* <Variant A or B here> */
evas_object_show(win);
次に、透明なジェスチャ レイヤーとタッチ コールバックを作成しようとします ( https://docs.tizen.org/application/native/guides/ui/efl/touch-gestureで説明されているように)。私は2つの変種を試しました。
バリアント A - ウォッチ (win) 用に作成したものと同じウィンドウを使用します。エラーはありませんが、機能しません。タッチイベントはありません:
/* Variant A */
/* Gesture layer transparent object */
Evas_Object *r;
/* Gesture layer object */
Evas_Object *g;
win = elm_win_util_standard_add("gesture_layer", "Gesture Layer");
elm_win_autodel_set(win, EINA_TRUE);
/* Gesture layer transparent object */
r = evas_object_rectangle_add(evas_object_evas_get(win));
evas_object_move(r, 0, 0);
evas_object_color_set(r, 0, 0, 255, 128);
elm_win_resize_object_add(win, r);
/* Gesture layer object */
g = elm_gesture_layer_add(win);
elm_gesture_layer_attach(g, r);
evas_object_show(r);
/* Set callbacks */
elm_gesture_layer_cb_set(g, ELM_GESTURE_N_TAPS, ELM_GESTURE_STATE_START, n_finger_tap_start, NULL);
バリアント B - タッチ レイヤーに別のオブジェクト winTouch を使用します。機能しますが、レイヤーは完全に不透明に見え、ウォッチフェイスは見えません:
/* Variant B */
Evas_Object *winTouch;
/* Gesture layer transparent object */
Evas_Object *r;
/* Gesture layer object */
Evas_Object *g;
winTouch = elm_win_util_standard_add("gesture_layer", "Gesture Layer");
elm_win_autodel_set(winTouch, EINA_TRUE);
/* Gesture layer transparent object */
r = evas_object_rectangle_add(evas_object_evas_get(winTouch));
evas_object_move(r, 0, 0);
evas_object_color_set(r, 0, 0, 255, 0);
elm_win_resize_object_add(winTouch, r);
/* Gesture layer object */
g = elm_gesture_layer_add(winTouch);
elm_gesture_layer_attach(g, r);
evas_object_show(r);
evas_object_show(winTouch); // <--- Without this line, Variant B behaves like Variant A
/* Set callbacks */
elm_gesture_layer_cb_set(g, ELM_GESTURE_N_TAPS, ELM_GESTURE_STATE_START, n_finger_tap_start, NULL);
// and other callbacks
私は何を間違っていますか?
私のプロジェクトは、SDK サンプル「クロノグラフ ウォッチ」に基づいています。実際には 4 つの異なる Evas_Object があります。
- evas_object_resize(勝利、幅、高さ);
- evas_object_resize(背景、幅、高さ);
- evas_object_resize(chronograph_layout, DIAM_SCREEN, DIAM_SCREEN);
- evas_object_resize(部品、size_w、size_h);
ジェスチャ レイヤーはどこに追加すればよいですか? 1に追加すると、バリアントAは何もせず、バリアントBは機能しますが、ウォッチフェイスを覆います. 他のいずれかでそれを行うと、両方のバリアントが機能しますが、ウォッチフェイスが覆われます。透明色を指定しているので、その理由がわかりません。
編集: 1 つの新しい考え: タッチ ジェスチャ レイヤーはアプリでのみ機能し、ウォッチフェイスでは機能しないのではないでしょうか?