0
我正在製作Pebble錶盤,以便在相應的Linux終端調用下顯示數據和時間以獲得這些時間。設置文本圖層的文本似乎覆蓋了顏色。
我有一個很好的靜態副本工作,但我想添加一個打字動畫的臉。
要做到這一點我使用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.
}
但我總是隻是來回改變文字顏色。 你是什麼意思移動它呢?沒有真正的打字發生。 – Vidia
您正在改變整個圖層的文字顏色。那真的是你想要做的嗎?或者你想改變一個角色的顏色? – sarfata
我想更改圖層的整個文本的顏色。我的想法是讓它看起來很清楚(即不可見),直到我需要顯示它。我認爲這比從家長那裏取消/重新安裝容易。 – Vidia