2014-03-29 99 views
0

我正在製作Pebble錶盤,以便在相應的Linux終端調用下顯示數據和時間以獲得這些時間。設置文本圖層的文本似乎覆蓋了顏色。

我有一個很好的靜態副本工作,但我想添加一個打字動畫的臉。

enter image description here

要做到這一點我使用AppTimer爲200毫秒,並在每次調用時輸入一個以上的字母。

但是現在我遇到了一個問題,即使我可以讓命令動畫化,我也無法讓大時間和日期文本消失(並且在命令完成鍵入時重新出現)。

下面是一些相關的代碼,剩下的就是在GitHub上https://github.com/vidia/Pebble-Shell/tree/type

我認爲它的發生是文本的設置將覆蓋顏色的設置,使文本再次出現。但我不完全確定。如有必要,請隨意自行安裝。

static char hourmin[] = "~$date +%I:%M"; 
static char timecmd[] = "    "; 
static char monthday[] = "~$date +%h\\ %d"; 
static char datecmd[] = "    "; 
... 
static void handleMinuteTick(...) 
{ 
    text_layer_set_text_color(time_layer, GColorClear);//the time text 
    text_layer_set_text_color(date_layer, GColorClear);//the date text 
    text_layer_set_text_color(dprompt_layer, GColorClear);//the date prompt 
    text_layer_set_text_color(prompt_layer, GColorClear);//the final, empty prompt 
    ... 
    //set text of time_layer to the current time 
    //register a timer 
} 

static void animateTimePrompt() 
{ 
    static unsigned int i = 2; 
    static int TYPE_TIME = 200; 

    app_log(APP_LOG_LEVEL_DEBUG, "unix-time.c", 97, "i: %d", i); 
    strncpy(timecmd, hourmin, i++); 
    app_log(APP_LOG_LEVEL_DEBUG, "unix-time.c", 60, "timecmd: \"%s\"", timecmd); 
    text_layer_set_text(text_layer, timecmd); 
    if(i > strlen(hourmin)) 
    { 
     app_log(APP_LOG_LEVEL_DEBUG, "unix-time.c", 97, "Typed word!!: %d", i); 
     i = 2; 
     text_layer_set_text_color(time_layer, GColorWhite); 
     text_layer_set_text_color(dprompt_layer, GColorWhite); 
     //app_timer_cancel(timer); 
     timer = app_timer_register(TYPE_TIME, animateDatePrompt, 0); 
    } 
    else 
     timer = app_timer_register(TYPE_TIME, animateTimePrompt, 0); 
} 

static void animateDatePrompt() 
{ 
    static int i = 2; 
    static int TYPE_TIME = 200; 

    app_log(APP_LOG_LEVEL_DEBUG, "unix-time.c", 97, "i: %d", i); 
    strncpy(datecmd, monthday, i++); 
    app_log(APP_LOG_LEVEL_DEBUG, "unix-time.c", 60, "datacmd: \"%s\"", datecmd); 
    text_layer_set_text(dprompt_layer, datecmd); 
    if((unsigned int) i > strlen(monthday)) 
    { 
     app_log(APP_LOG_LEVEL_DEBUG, "unix-time.c", 97, "Typed word!!: %d", i); 
     i = 2; 
     text_layer_set_text_color(date_layer, GColorWhite); 
     text_layer_set_text_color(prompt_layer, GColorWhite); 
     //timer = app_timer_register(TYPE_TIME, animateDatePrompt, 0); 
     //app_timer_cancel(timer); 
    } 
    else 
     timer = app_timer_register(TYPE_TIME, animateDatePrompt, 0); 
} 

... 
void handleSecondTick(...) 
{ 
    //set text of prompt_layer for the blinking cursor. 
} 

回答

0

我想你只是想改變提示的顏色,改變整個文本層的顏色。我認爲只需創建一個圖層來顯示提示,然後在用戶輸入時將其移動即可。

+0

但我總是隻是來回改變文字顏色。 你是什麼意思移動它呢?沒有真正的打字發生。 – Vidia

+0

您正在改變整個圖層的文字顏色。那真的是你想要做的嗎?或者你想改變一個角色的顏色? – sarfata

+0

我想更改圖層的整個文本的顏色。我的想法是讓它看起來很清楚(即不可見),直到我需要顯示它。我認爲這比從家長那裏取消/重新安裝容易。 – Vidia