日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

java模拟时钟源代码_Android实现模拟时钟(简单+漂亮)--时针、分针、秒针

發(fā)布時間:2024/3/26 Android 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java模拟时钟源代码_Android实现模拟时钟(简单+漂亮)--时针、分针、秒针 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

前不久在網(wǎng)上看見Android實現(xiàn)的模擬時鐘,感覺十分有意思,這里是地址:

秒表。筆者突然對其有了興趣,也想去實現(xiàn)以下自己的模擬時鐘。折騰了一陣子總算是弄出來了

現(xiàn)在將實現(xiàn)方式共享出來,大家一些交流。

不多說,先上效果圖:

準(zhǔn)備工作

首先我們應(yīng)該準(zhǔn)備相關(guān)的素材:時鐘盤、時針、分針、秒針圖片.

時鐘盤:

時針:

分針:

秒針:

源碼部分

配置文件,比較簡單:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical"

tools:context=".MainActivity"

android:background="@color/bg">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

/>

MyQAnalogClock代碼:用于構(gòu)造時鐘view以及其刷新顯示:

package com.kiritor.mymodelclock;

import android.util.AttributeSet;

import com.kiritor.mymodelclock.R;

import android.content.Context;

import android.graphics.*;

import android.graphics.drawable.BitmapDrawable;

import android.os.Handler;

import android.view.View;

import java.util.Calendar;

import java.util.TimeZone;

/**

* Created by Kiritor on 13-5-30.

*/

public class MyQAnalogClock extends View {

//時鐘盤,分針、秒針、時針對象

Bitmap mBmpDial;

Bitmap mBmpHour;

Bitmap mBmpMinute;

Bitmap mBmpSecond;

BitmapDrawable bmdHour;

BitmapDrawable bmdMinute;

BitmapDrawable bmdSecond;

BitmapDrawable bmdDial;

Paint mPaint;

Handler tickHandler;

int mWidth;

int mHeigh;

int mTempWidth = bmdSecond.getIntrinsicWidth();

int mTempHeigh;

int centerX;

int centerY;

int availableWidth = 100;

int availableHeight = 100;

private String sTimeZoneString;

public MyQAnalogClock(Context context,AttributeSet attr)

{

this(context,"GMT+8:00");

}

public MyQAnalogClock(Context context, String sTime_Zone) {

super(context);

sTimeZoneString = sTime_Zone;

mBmpHour = BitmapFactory.decodeResource(getResources(),

R.drawable.shizhen);

bmdHour = new BitmapDrawable(mBmpHour);

mBmpMinute = BitmapFactory.decodeResource(getResources(),

R.drawable.fenzhen);

bmdMinute = new BitmapDrawable(mBmpMinute);

mBmpSecond = BitmapFactory.decodeResource(getResources(),

R.drawable.miaozhen);

bmdSecond = new BitmapDrawable(mBmpSecond);

mBmpDial = BitmapFactory.decodeResource(getResources(),

R.drawable.android_clock_dial);

bmdDial = new BitmapDrawable(mBmpDial);

mWidth = mBmpDial.getWidth();

mHeigh = mBmpDial.getHeight();

centerX = availableWidth / 2;

centerY = availableHeight / 2;

mPaint = new Paint();

mPaint.setColor(Color.BLUE);

run();

}

public void run() {

tickHandler = new Handler();

tickHandler.post(tickRunnable);

}

private Runnable tickRunnable = new Runnable() {

public void run() {

postInvalidate();

tickHandler.postDelayed(tickRunnable, 1000);

}

};

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

Calendar cal = Calendar.getInstance(TimeZone

.getTimeZone(sTimeZoneString));

int hour = cal.get(Calendar.HOUR);

int minute = cal.get(Calendar.MINUTE);

int second = cal.get(Calendar.SECOND);

float hourRotate = hour * 30.0f + minute / 60.0f * 30.0f;

float minuteRotate = minute * 6.0f;

float secondRotate = second * 6.0f;

boolean scaled = false;

if (availableWidth < mWidth || availableHeight < mHeigh) {

scaled = true;

float scale = Math.min((float) availableWidth / (float) mWidth,

(float) availableHeight / (float) mHeigh);

canvas.save();

canvas.scale(scale, scale, centerX, centerY);

}

bmdDial.setBounds(centerX - (mWidth / 2), centerY - (mHeigh / 2),

centerX + (mWidth / 2), centerY + (mHeigh / 2));

bmdDial.draw(canvas);

mTempWidth = bmdHour.getIntrinsicWidth();

mTempHeigh = bmdHour.getIntrinsicHeight();

canvas.save();

canvas.rotate(hourRotate, centerX, centerY);

bmdHour.setBounds(centerX - (mTempWidth / 2), centerY

- (mTempHeigh / 2), centerX + (mTempWidth / 2), centerY

+ (mTempHeigh / 2));

bmdHour.draw(canvas);

canvas.restore();

mTempWidth = bmdMinute.getIntrinsicWidth();

mTempHeigh = bmdMinute.getIntrinsicHeight();

canvas.save();

canvas.rotate(minuteRotate, centerX, centerY);

bmdMinute.setBounds(centerX - (mTempWidth / 2), centerY

- (mTempHeigh / 2), centerX + (mTempWidth / 2), centerY

+ (mTempHeigh / 2));

bmdMinute.draw(canvas);

canvas.restore();

mTempWidth = bmdSecond.getIntrinsicWidth();

mTempHeigh = bmdSecond.getIntrinsicHeight();

canvas.rotate(secondRotate, centerX, centerY);

bmdSecond.setBounds(centerX - (mTempWidth / 2), centerY

- (mTempHeigh / 2), centerX + (mTempWidth / 2), centerY

+ (mTempHeigh / 2));

bmdSecond.draw(canvas);

if (scaled) {

canvas.restore();

}

}

}

主Activity:

package com.kiritor.mymodelclock;

import android.app.Activity;

import android.os.Bundle;

/**

* Created by Kiritor on 13-5-30.

*/

public class MainActivity extends Activity {

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

}

好了一個簡單的模擬時鐘就完成了,不過通過觀察運行效果可以看出的是,筆者對

時針、分針、秒針圖片的設(shè)計不是太美觀,看的不是太清楚,體驗略差。不過這不是重點

讀者可以自己去設(shè)計一下那4張圖片,從而做出不同的效果!

這里本實例使用Android Studio做的,完整項目源碼就不上傳了!Over!

總結(jié)

以上是生活随笔為你收集整理的java模拟时钟源代码_Android实现模拟时钟(简单+漂亮)--时针、分针、秒针的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。