2015-08-01 2 views
-1

Я пытаюсь создать WatchFace, у которого есть краска AM/PM, и я хочу быть разными цветами на основе, если это AM или PM. Я также хочу распространить это на дни недели.Цвет WatchFace на основе даты/времени

SimpleWatchFace.java

Paint ampmPaint = new Paint(); 
final SimpleDateFormat amorpm = new SimpleDateFormat("a", Locale.US); 
if (amorpm.format(new Date()).equals("AM")) { 
    ampmPaint.setColor(Color.RED); 
} 
else { 
    ampmPaint.setColor(Color.GREEN); 
} 
ampmPaint.setTextSize(context.getResources().getDimension(R.dimen.ampm_size)); 
ampmPaint.setAntiAlias(true); 
ampmPaint.setTextSize(context.getResources().getDimension(R.dimen.ampm_size)); 
ampmPaint.setAntiAlias(true); 

... 

public void setAmColor(int color) { 
    ampmPaint.setColor(color); 
} 

public void setPmColor(int color) { 
    ampmPaint.setColor(color); 
} 

SimpleWatchFaceService.java

@Override 
public void onAmbientModeChanged(boolean inAmbientMode) { 
    super.onAmbientModeChanged(inAmbientMode); 
    watchFace.setAntiAlias(!inAmbientMode); 

     if(inAmbientMode) { 
      watchFace.setPmColor(Color.GRAY); 
      watchFace.setAmColor(Color.GRAY); 
     } 
     else { 
      watchFace.setPmColor(Color.GREEN); 
      watchFace.setAmColor(Color.RED); 
     } 
     invalidate(); 
    } 

До сих пор цвет работает на интерактивном режиме, но как только он переходит в режим окружающей среды и обратно в интерактивном режиме, цвета не работают, и я знаю, что мой код не работает. Мне интересно, как бы я исправил свой код, чтобы он вернулся к цвету в интерактивном режиме.

+0

Вы забыли задать вопрос. – 323go

ответ

0

u Чтобы получить день недели (1 = понедельник, 7 = воскресенье). Также отметим, что

if (amorpm.equals("AM")){ 

всегда будет возвращать false, потому что вы проверяете, если SimpleDateFormat равен String. Правильное использование будет:

SimpleDateFormat amorpm = new SimpleDateFormat("a", Locale.US); 
SimpleDateFormat dayofweek = new SimpleDateFormat("u", Locale.US); 
if (amorpm.format(new Date()).equals("AM")) { 
    // AM 
    ... 

и (обратите внимание, что вы можете switch на нитях сейчас):

switch (dayofweek.format(new Date()) { 
    case "1": 
     // Monday 
     ... 

Что касается режима окружающей среды, чтобы определить, что вы будете нуждаться в DisplayListener как на this question.

+0

Для окружающего режима я использую onAmbientModeChanged и имею это внутри оператора if/else, watchFace.setAmPmColor (Color.GRAY) ;. public void setAmPmColor (int color) { ampmPaint.setColor (цвет); } –

+0

@ SagarGarg да, это сработает. – Glorfindel

+0

Я отредактировал мой вопрос, чтобы лучше сказать, что я пытаюсь сделать –

Смежные вопросы