From e8c999a36bea982e8eedf600f479bf54c7b6f6b7 Mon Sep 17 00:00:00 2001 From: danijoo Date: Thu, 3 Dec 2015 14:28:31 +0100 Subject: [PATCH] watchface scaffold --- .../wear/SunshineWatchFaceService.java | 101 +++++++++++------- wear/src/main/res/values/colors.xml | 5 +- wear/src/main/res/values/dimens.xml | 29 ++++- 3 files changed, 88 insertions(+), 47 deletions(-) diff --git a/wear/src/main/java/com/example/android/sunshine/wear/SunshineWatchFaceService.java b/wear/src/main/java/com/example/android/sunshine/wear/SunshineWatchFaceService.java index 995edf7..b4ad61d 100644 --- a/wear/src/main/java/com/example/android/sunshine/wear/SunshineWatchFaceService.java +++ b/wear/src/main/java/com/example/android/sunshine/wear/SunshineWatchFaceService.java @@ -21,6 +21,8 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; @@ -87,7 +89,10 @@ public class SunshineWatchFaceService extends CanvasWatchFaceService { final Handler mUpdateTimeHandler = new EngineHandler(this); boolean mRegisteredTimeZoneReceiver = false; Paint mBackgroundPaint; - Paint mTextPaint; + Paint mTimeTextPaint; + Paint mDateTextPaint; + Paint mHighestTempPaint; + Paint mLowestTempPaint; boolean mAmbient; Time mTime; final BroadcastReceiver mTimeZoneReceiver = new BroadcastReceiver() { @@ -97,10 +102,13 @@ public class SunshineWatchFaceService extends CanvasWatchFaceService { mTime.setToNow(); } }; - int mTapCount; - - float mXOffset; - float mYOffset; + float mTimeXOffset; + float mTimeYOffset; + float mDateXOffset; + float mDateYOffset; + float mWeatherYOffset; + float mWeatherXOffset; + float mWeatherXOffset2; /** * Whether the display supports fewer bits for each color in ambient mode. When true, we @@ -119,13 +127,19 @@ public class SunshineWatchFaceService extends CanvasWatchFaceService { .setAcceptsTapEvents(true) .build()); Resources resources = SunshineWatchFaceService.this.getResources(); - mYOffset = resources.getDimension(R.dimen.digital_y_offset); + mTimeYOffset = resources.getDimension(R.dimen.time_y_offset); + mDateYOffset = resources.getDimension(R.dimen.date_y_offset); + mWeatherYOffset = resources.getDimension(R.dimen.weather_y_offset); mBackgroundPaint = new Paint(); mBackgroundPaint.setColor(resources.getColor(R.color.background)); - mTextPaint = new Paint(); - mTextPaint = createTextPaint(resources.getColor(R.color.digital_text)); + mTimeTextPaint = createTextPaint(resources.getColor(R.color.textcolor_primary)); + mDateTextPaint = createTextPaint(resources.getColor(R.color.textcolor_secondary)); + + mHighestTempPaint = createTextPaint(resources.getColor(R.color.textcolor_primary)); + mHighestTempPaint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD)); + mLowestTempPaint = createTextPaint(resources.getColor(R.color.textcolor_primary)); mTime = new Time(); } @@ -187,12 +201,30 @@ public class SunshineWatchFaceService extends CanvasWatchFaceService { // Load resources that have alternate values for round watches. Resources resources = SunshineWatchFaceService.this.getResources(); boolean isRound = insets.isRound(); - mXOffset = resources.getDimension(isRound - ? R.dimen.digital_x_offset_round : R.dimen.digital_x_offset); - float textSize = resources.getDimension(isRound - ? R.dimen.digital_text_size_round : R.dimen.digital_text_size); + mTimeXOffset = resources.getDimension(isRound + ? R.dimen.time_x_offset_round : R.dimen.time_x_offset); + mDateXOffset = resources.getDimension(isRound + ? R.dimen.date_x_offset_round : R.dimen.date_x_offset); + mWeatherXOffset = resources.getDimension(isRound + ? R.dimen.weather_x_offset_round : R.dimen.weather_x_offset); + mWeatherXOffset2 = resources.getDimension(isRound + ? R.dimen.weather_x_offset_round_2 : R.dimen.weather_x_offset_2); - mTextPaint.setTextSize(textSize); + float timeTextSize = resources.getDimension(isRound + ? R.dimen.time_text_size_round : R.dimen.time_text_size); + mTimeTextPaint.setTextSize(timeTextSize); + + float dateTextSize = resources.getDimension(isRound + ? R.dimen.date_text_size_round : R.dimen.date_text_size); + mDateTextPaint.setTextSize(dateTextSize); + + float weatherTextSize = resources.getDimension(isRound + ? R.dimen.weather_text_size_round : R.dimen.weather_text_size); + mHighestTempPaint.setTextSize(weatherTextSize); + + float weatherTextSize2 = resources.getDimension(isRound + ? R.dimen.weather_text_size_round_2 : R.dimen.weather_text_size_2); + mLowestTempPaint.setTextSize(weatherTextSize2); } @Override @@ -213,7 +245,7 @@ public class SunshineWatchFaceService extends CanvasWatchFaceService { if (mAmbient != inAmbientMode) { mAmbient = inAmbientMode; if (mLowBitAmbient) { - mTextPaint.setAntiAlias(!inAmbientMode); + mTimeTextPaint.setAntiAlias(!inAmbientMode); } invalidate(); } @@ -223,29 +255,7 @@ public class SunshineWatchFaceService extends CanvasWatchFaceService { updateTimer(); } - /** - * Captures tap event (and tap type) and toggles the background color if the user finishes - * a tap. - */ - @Override - public void onTapCommand(int tapType, int x, int y, long eventTime) { - Resources resources = SunshineWatchFaceService.this.getResources(); - switch (tapType) { - case TAP_TYPE_TOUCH: - // The user has started touching the screen. - break; - case TAP_TYPE_TOUCH_CANCEL: - // The user has started a different gesture or otherwise cancelled the tap. - break; - case TAP_TYPE_TAP: - // The user has completed the tap gesture. - mTapCount++; - mBackgroundPaint.setColor(resources.getColor(mTapCount % 2 == 0 ? - R.color.background : R.color.background2)); - break; - } - invalidate(); - } + @Override public void onDraw(Canvas canvas, Rect bounds) { @@ -256,12 +266,23 @@ public class SunshineWatchFaceService extends CanvasWatchFaceService { canvas.drawRect(0, 0, bounds.width(), bounds.height(), mBackgroundPaint); } - // Draw H:MM in ambient mode or H:MM:SS in interactive mode. mTime.setToNow(); - String text = mAmbient + // Draw H:MM in ambient mode or H:MM:SS in interactive mode. + String timeText = mAmbient ? String.format("%d:%02d", mTime.hour, mTime.minute) : String.format("%d:%02d:%02d", mTime.hour, mTime.minute, mTime.second); - canvas.drawText(text, mXOffset, mYOffset, mTextPaint); + canvas.drawText(timeText, mTimeXOffset, mTimeYOffset, mTimeTextPaint); + + // Draw current date + String dateText = mTime.format("%a, %b %m %Y"); + canvas.drawText(dateText, mDateXOffset, mDateYOffset, mDateTextPaint); + + // Draw weather + String currentHigh = "25 \u00b0C"; + String currentLow = "16 \u00b0C"; + canvas.drawText(currentHigh, mWeatherXOffset, mWeatherYOffset, mHighestTempPaint); + canvas.drawText(currentLow, mWeatherXOffset + mWeatherXOffset2, mWeatherYOffset, mLowestTempPaint); + } /** diff --git a/wear/src/main/res/values/colors.xml b/wear/src/main/res/values/colors.xml index 45006f1..367191b 100644 --- a/wear/src/main/res/values/colors.xml +++ b/wear/src/main/res/values/colors.xml @@ -1,6 +1,7 @@ - #000000 + #1ca8f4 #000088 - #ffffff + #ffffff + #ddd diff --git a/wear/src/main/res/values/dimens.xml b/wear/src/main/res/values/dimens.xml index 683f561..2d4469a 100644 --- a/wear/src/main/res/values/dimens.xml +++ b/wear/src/main/res/values/dimens.xml @@ -1,8 +1,27 @@ - 40dp - 45dp - 15dp - 25dp - 90dp + 40dp + 45dp + 15dp + 25dp + 70dp + + 20dp + 25dp + 15dp + 25dp + 100dp + + 20dp + 25dp + 15dp + 20dp + 45dp + 55dp + 70dp + 100dp + 140dp + + 40dp +