⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 digitalclock.java

📁 Android app: AlartClock闹钟
💻 JAVA
字号:
/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package com.android.alarmclock;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.content.res.Resources;import android.database.ContentObserver;import android.graphics.drawable.AnimationDrawable;import android.graphics.drawable.Drawable;import android.os.Handler;import android.provider.Settings;import android.text.format.DateFormat;import android.util.AttributeSet;import android.view.View;import android.widget.LinearLayout;import android.widget.TextView;import java.util.Calendar;/** * Displays the time */public class DigitalClock extends LinearLayout {    private final static String M12 = "h:mm";    private final static String M24 = "k:mm";    private Calendar mCalendar;    private String mFormat;    private TextView mTimeDisplay;    private AmPm mAmPm;    private boolean mAnimate;    private ContentObserver mFormatChangeObserver;    private boolean mLive = true;    private boolean mAttached;    /* called by system on minute ticks */    private final Handler mHandler = new Handler();    private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {            @Override            public void onReceive(Context context, Intent intent) {                if (mLive && intent.getAction().equals(                            Intent.ACTION_TIMEZONE_CHANGED)) {                    mCalendar = Calendar.getInstance();                }                updateTime();            }        };    static class AmPm {        private int mColorOn, mColorOff;        private LinearLayout mAmPmLayout;        private TextView mAm, mPm;        AmPm(View parent) {            mAmPmLayout = (LinearLayout) parent.findViewById(R.id.am_pm);            mAm = (TextView)mAmPmLayout.findViewById(R.id.am);            mPm = (TextView)mAmPmLayout.findViewById(R.id.pm);            Resources r = parent.getResources();            mColorOn = r.getColor(R.color.ampm_on);            mColorOff = r.getColor(R.color.ampm_off);        }        void setShowAmPm(boolean show) {            mAmPmLayout.setVisibility(show ? View.VISIBLE : View.GONE);        }        void setIsMorning(boolean isMorning) {            mAm.setTextColor(isMorning ? mColorOn : mColorOff);            mPm.setTextColor(isMorning ? mColorOff : mColorOn);        }    }    private class FormatChangeObserver extends ContentObserver {        public FormatChangeObserver() {            super(new Handler());        }        @Override        public void onChange(boolean selfChange) {            setDateFormat();            updateTime();        }    }    public DigitalClock(Context context) {        this(context, null);    }    public DigitalClock(Context context, AttributeSet attrs) {        super(context, attrs);    }    @Override    protected void onFinishInflate() {        super.onFinishInflate();        mTimeDisplay = (TextView) findViewById(R.id.timeDisplay);        mAmPm = new AmPm(this);        mCalendar = Calendar.getInstance();        setDateFormat();    }    @Override    protected void onAttachedToWindow() {        super.onAttachedToWindow();        if (Log.LOGV) Log.v("onAttachedToWindow " + this);        if (mAttached) return;        mAttached = true;        if (mAnimate) {            AnimationDrawable frameAnimation =                    (AnimationDrawable) mContext.getResources().getDrawable(                            R.drawable.animate_circle);            View digitalClock = findViewById(R.id.digitalClock);            digitalClock.setBackgroundDrawable(frameAnimation);            /* Start the animation (looped playback by default). */            ((AnimationDrawable) digitalClock.getBackground()).start();            /* No luck wrapping animation or individual bitmaps in a               ScaleDrawable */            digitalClock.requestLayout();        }        if (mLive) {            /* monitor time ticks, time changed, timezone */            IntentFilter filter = new IntentFilter();            filter.addAction(Intent.ACTION_TIME_TICK);            filter.addAction(Intent.ACTION_TIME_CHANGED);            filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);            mContext.registerReceiver(mIntentReceiver, filter, null, mHandler);        }        /* monitor 12/24-hour display preference */        mFormatChangeObserver = new FormatChangeObserver();        mContext.getContentResolver().registerContentObserver(                Settings.System.CONTENT_URI, true, mFormatChangeObserver);        updateTime();    }    @Override    protected void onDetachedFromWindow() {        super.onDetachedFromWindow();        if (!mAttached) return;        mAttached = false;        Drawable background = getBackground();        if (background instanceof AnimationDrawable) {            ((AnimationDrawable) background).stop();        }        if (mLive) {            mContext.unregisterReceiver(mIntentReceiver);        }        mContext.getContentResolver().unregisterContentObserver(                mFormatChangeObserver);    }    void updateTime(Calendar c) {        mCalendar = c;        updateTime();    }    private void updateTime() {        if (mLive) {            mCalendar.setTimeInMillis(System.currentTimeMillis());        }        CharSequence newTime = DateFormat.format(mFormat, mCalendar);        mTimeDisplay.setText(newTime);        mAmPm.setIsMorning(mCalendar.get(Calendar.AM_PM) == 0);    }    private void setDateFormat() {        mFormat = Alarms.get24HourMode(mContext) ? M24 : M12;        mAmPm.setShowAmPm(mFormat == M12);    }    void setAnimate() {        mAnimate = true;    }    void setLive(boolean live) {        mLive = live;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -