watchface scaffold
This commit is contained in:
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="background">#000000</color>
|
||||
<color name="background">#1ca8f4</color>
|
||||
<color name="background2">#000088</color>
|
||||
<color name="digital_text">#ffffff</color>
|
||||
<color name="textcolor_primary">#ffffff</color>
|
||||
<color name="textcolor_secondary">#ddd</color>
|
||||
</resources>
|
||||
|
||||
@@ -1,8 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<dimen name="digital_text_size">40dp</dimen>
|
||||
<dimen name="digital_text_size_round">45dp</dimen>
|
||||
<dimen name="digital_x_offset">15dp</dimen>
|
||||
<dimen name="digital_x_offset_round">25dp</dimen>
|
||||
<dimen name="digital_y_offset">90dp</dimen>
|
||||
<dimen name="time_text_size">40dp</dimen>
|
||||
<dimen name="time_text_size_round">45dp</dimen>
|
||||
<dimen name="time_x_offset">15dp</dimen>
|
||||
<dimen name="time_x_offset_round">25dp</dimen>
|
||||
<dimen name="time_y_offset">70dp</dimen>
|
||||
|
||||
<dimen name="date_text_size">20dp</dimen>
|
||||
<dimen name="date_text_size_round">25dp</dimen>
|
||||
<dimen name="date_x_offset">15dp</dimen>
|
||||
<dimen name="date_x_offset_round">25dp</dimen>
|
||||
<dimen name="date_y_offset">100dp</dimen>
|
||||
|
||||
<dimen name="weather_text_size">20dp</dimen>
|
||||
<dimen name="weather_text_size_round">25dp</dimen>
|
||||
<dimen name="weather_text_size_2">15dp</dimen>
|
||||
<dimen name="weather_text_size_round_2">20dp</dimen>
|
||||
<dimen name="weather_x_offset">45dp</dimen>
|
||||
<dimen name="weather_x_offset_round">55dp</dimen>
|
||||
<dimen name="weather_x_offset_2">70dp</dimen>
|
||||
<dimen name="weather_x_offset_round_2">100dp</dimen>
|
||||
<dimen name="weather_y_offset">140dp</dimen>
|
||||
|
||||
<dimen name="weather_indicator_size">40dp</dimen>
|
||||
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user