Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.anlogclocksettimeexample;
- import java.util.Date;
- import android.app.Service;
- import android.appwidget.AppWidgetManager;
- import android.content.ComponentName;
- import android.content.Intent;
- import android.content.res.Resources;
- import android.graphics.Bitmap;
- import android.graphics.Canvas;
- import android.graphics.drawable.BitmapDrawable;
- import android.graphics.drawable.Drawable;
- import android.os.IBinder;
- import android.text.format.DateFormat;
- import android.text.format.Time;
- import android.util.TypedValue;
- import android.widget.AnalogClock;
- import android.widget.RemoteViews;
- import android.widget.Toast;
- public class TimeSettableAnalogClockService extends Service {
- private Time mCalendar;
- private float mMinutes;
- private float mHour;
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- buildUpdate();
- return super.onStartCommand(intent, flags, startId);
- }
- private void buildUpdate() {
- RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.appwidget);
- mCalendar = new Time();
- // Line below sets time that will be displayed - modify as needed.
- mCalendar.setToNow();
- int hour = mCalendar.hour;
- int minute = mCalendar.minute;
- int second = mCalendar.second;
- mMinutes = minute + second / 60.0f;
- mHour = hour + mMinutes / 60.0f;
- Resources r = getApplicationContext().getResources();
- // You'll have to determine tour own dimensions of space to which analog clock is drawn.
- final int APP_WIDGET_WIDTH_DP = 210; // Taken from widget_provider.xml: android:minWidth="210dp"
- final int APP_WIDGET_HEIGHT_DP = 210; // Taken from widget_provider.xml: android:minHeight="210dp"
- final int availableWidth = (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, APP_WIDGET_WIDTH_DP, r.getDisplayMetrics()) + 0.5f);
- final int availableHeight = (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, APP_WIDGET_HEIGHT_DP, r.getDisplayMetrics()) + 0.5f);
- int x = availableWidth / 2;
- int y = availableHeight / 2;
- // Creating Bitmap and Canvas to which analog clock will be drawn.
- Bitmap appWidgetBitmap = Bitmap.createBitmap(availableWidth, availableHeight, Bitmap.Config.ARGB_8888);
- Canvas canvas = new Canvas(appWidgetBitmap);
- final Drawable dial = r.getDrawable(R.drawable.clock_dial);
- int w = dial.getIntrinsicWidth();
- int h = dial.getIntrinsicHeight();
- boolean scaled = false;
- if (availableWidth < w || availableHeight < h) {
- scaled = true;
- float scale = Math.min((float) availableWidth / (float) w,
- (float) availableHeight / (float) h);
- canvas.save();
- canvas.scale(scale, scale, x, y);
- }
- dial.setBounds(x - (w / 2), y - (h / 2), x + (w / 2), y + (h / 2));
- dial.draw(canvas);
- canvas.save();
- canvas.rotate(mHour / 12.0f * 360.0f, x, y);
- final Drawable hourHand = r.getDrawable(R.drawable.clock_hand_hour);
- w = hourHand.getIntrinsicWidth();
- h = hourHand.getIntrinsicHeight();
- hourHand.setBounds(x - (w / 2), y - (h / 2), x + (w / 2), y + (h / 2));
- hourHand.draw(canvas);
- canvas.restore();
- canvas.save();
- canvas.rotate(mMinutes / 60.0f * 360.0f, x, y);
- final Drawable minuteHand = r.getDrawable(R.drawable.clock_hand_minute);
- w = minuteHand.getIntrinsicWidth();
- h = minuteHand.getIntrinsicHeight();
- minuteHand.setBounds(x - (w / 2), y - (h / 2), x + (w / 2), y + (h / 2));
- minuteHand.draw(canvas);
- canvas.restore();
- if (scaled) {
- canvas.restore();
- }
- remoteViews.setImageViewBitmap(R.id.imageView1, appWidgetBitmap);
- // Pushing widget update to home screen
- ComponentName widgetComponentName = new ComponentName(this, TimeSettableAnalogClockAppWidget.class);
- AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
- appWidgetManager.updateAppWidget(widgetComponentName, remoteViews);
- }
- @Override
- public IBinder onBind(Intent intent) {
- return null;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement