`
yutiansky
  • 浏览: 198153 次
  • 性别: Icon_minigender_1
  • 来自: 本溪
社区版块
存档分类
最新评论

(Android)画个钟看看

阅读更多

画个钟,用Android

package net.tianyu.android.clock;

import java.util.Calendar;
import java.util.TimeZone;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.RelativeLayout;

public class AndroidClock extends Activity {
	private HourView hourView;
	private Handler hourHandler;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		RelativeLayout absLayout = new RelativeLayout(this);

		hourView = new HourView(this);
		hourHandler = new Handler();
		hourHandler.post(updateHour);
		absLayout.addView(hourView, new RelativeLayout.LayoutParams(416, 416));

		setContentView(absLayout);
	}

	private Runnable updateHour = new Runnable() {
		public void run() {
			hourView.update();
			hourHandler.postDelayed(updateHour, 1000);
		}
	};

	class HourView extends View {

		Matrix mHourMatrix = new Matrix();
		Matrix mMinuteMatrix = new Matrix();
		Bitmap mBmpHour;
		Bitmap mBmpMinute;
		Bitmap mBmpBackground;

		int mWidth = 173;
		int mHeight = mWidth;
		int centerX = 145;
		int centerY = 200;

		public HourView(Context context) {
			super(context);
			mBmpHour = BitmapFactory.decodeResource(getResources(), R.drawable.hour);
			mBmpMinute = BitmapFactory.decodeResource(getResources(), R.drawable.minute);
			mBmpBackground = BitmapFactory.decodeResource(getResources(), R.drawable.background);
		}

		public void update() {
			postInvalidate();
		}

		protected void onDraw(Canvas canvas) {
			super.onDraw(canvas);
			Paint p = new Paint();
			p.setColor(Color.RED);

			Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+9:00"));
			int hour = cal.get(Calendar.HOUR);
			int minute = cal.get(Calendar.MINUTE);
			float hourRotate = 270.0f + hour * 30.0f + minute / 60.0f * 30.0f;
			float minuteRotate = 270.0f + minute * 6.0f;

			canvas.drawBitmap(mBmpBackground, 0, 0, p);

			mHourMatrix.postRotate(hourRotate, 17, 7);
			mMinuteMatrix.postRotate(minuteRotate, 17, 7);
			mHourMatrix.postTranslate(centerX, centerY);
			mMinuteMatrix.postTranslate(centerX, centerY);

			canvas.drawBitmap(mBmpHour, mHourMatrix, p);
			canvas.drawBitmap(mBmpMinute, mMinuteMatrix, p);

			mHourMatrix.postTranslate(-1 * centerX, -1 * centerY);
			mMinuteMatrix.postTranslate(-1 * centerX, -1 * centerY);
			mHourMatrix.postRotate(-1.0f * hourRotate, 17, 7);
			mMinuteMatrix.postRotate(-1.0f * minuteRotate, 17, 7);
		}
	}
}
分享到:
评论

相关推荐

    Android 自定义View实现动画时钟

    本项目"Android 自定义View实现动画时钟"就是一个很好的示例,它展示了如何利用自定义View和ValueAnimator来创建一个实时更新并带有动画效果的时钟组件。 首先,自定义View通常涉及到以下几个步骤: 1. **创建View...

    基于android的自定义时钟

    本文将深入探讨如何在Android环境中实现一个基于代码的自定义时钟组件,特别是聚焦于"MyAnalogClock"这个例子。 首先,我们从基础开始。在Android中,我们可以利用View或ViewGroup来构建自定义视图。对于一个自定义...

    android动画案例集合

    首先,我们来看渐变动画。渐变动画分为两种:帧动画和补间动画。帧动画通过连续播放一系列图片来创建动效,常用于游戏或动态图标。补间动画则在两个指定状态之间平滑过渡,如物体颜色、透明度的变化。通过`...

    android仿锤子数字时钟

    在Android应用开发中,创建一个独特的数字时钟界面可以提升用户体验,同时展示开发者的设计技巧。"android仿锤子数字时钟"项目就是这样一个实例,它模仿了锤子手机(Smartisan OS)中的数字时钟样式。下面,我们将...

    用android画会运动的钟

    - 添加背景和前景色,使钟看起来更美观。 - 增加点击事件,使得用户可以通过点击切换不同样式或功能的钟。 - 优化性能,避免不必要的重绘,比如当秒针移动时,只更新秒针的动画,而不是整个钟面。 最后,记得在布局...

    Android画个时钟玩玩

    先看下最终的效果   开始实现 新建一个ClockView集成View public class ClockView extends View { } 先重写onMeasure方法,这里要先说一下View的测量模式,一共有三种: 1、EXACTLY 即精确值模式,当我们将控件...

    时间 android 自定义时钟

    这个项目标题“时间 android 自定义时钟”暗示我们将会探讨如何在Android应用中创建一个定制化的时钟组件。下面将详细介绍这个主题。 首先,让我们了解Android中的时间显示。Android系统提供了许多内置的API来处理...

    android AnimationDemo透明伸缩移动旋转等十几个动画特效

    `AnimationDemo`是一个专为展示Android平台上的各种动画效果而设计的示例项目。这个项目涵盖了透明度变化、伸缩、移动和旋转等多种基本动画类型,帮助开发者理解并实现复杂的UI动态效果。 首先,我们来看透明度变化...

    android多功能时钟全代码

    8. **UI动画**:为了让时钟看起来更加生动,开发者可能会使用Android的动画库来创建动态效果,比如指针转动、数字滑动等。 9. **DayNight主题和Material Design**:为了提供良好的用户体验,应用可能遵循Android的...

    Android-TClock类似时钟的自定义控件包含事件监听

    总之,`TClock`是一个结合了Canvas绘图和事件监听的自定义控件实例,它展示了Android开发中的图形绘制、动画处理和用户交互。通过学习和实践,开发者不仅可以掌握这些基础知识,还能提升自己的编程技巧,为构建更多...

    Android 自定义时钟.zip

    Android提供了ObjectAnimator、ValueAnimator和TweenAnimation等工具,让指针转动看起来更自然流畅。 5. **布局设计**:XML布局文件用于定义用户界面。在这个项目中,可能包含一个自定义的View组件,用于显示自定义...

    android Clock时钟源码.rar

    5. **世界时钟**:Android Clock还支持世界时钟功能,允许用户添加并显示多个城市的时钟。这部分源码涉及地理信息处理、时区转换等,通过TimeZone类获取和设置不同的时区信息。 6. **电源管理**:考虑到时钟在锁屏...

    Android源码——自定义时钟.zip

    本资源“Android源码——自定义时钟.zip”显然聚焦于如何在Android平台上构建一个自定义的时钟组件。自定义时钟通常涉及到图形绘制、动画效果以及时间更新机制,下面将详细探讨这些关键知识点。 首先,我们来看...

    Android项目源码Remindly闹钟

    在Remindly项目中,开发者遵循这一规范,使用了相应的UI组件和动画效果,使应用看起来既美观又符合Android用户的使用习惯。 2. **AlarmManager**: Android系统的`AlarmManager`服务用于安排应用程序在特定时间执行...

    画布:时钟.rar

    在Android开发中,"画布:时钟.rar"可能是一个包含源码的压缩包,用于展示如何在Android平台上实现自定义的时钟视图。这个压缩包中的源码可能包括一个自定义View类,该类继承自Android的View或者SurfaceView,并通过...

    Android 时钟

    本文将详细解析"Android时钟"这一主题,特别是如何自定义一个基于背景图片的时钟控件。 一、Android时钟基础 Android系统提供了多种时钟类型,包括数字时钟(DigitalClock)和模拟时钟(AnalogClock)。数字时钟以...

    自定义View之钟表

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据需求创建独特的用户界面元素。本教程将聚焦于如何利用自定义...通过这个项目,开发者可以深入理解自定义View的工作原理,提升自己的Android开发能力。

    圆环扫描动画+scale+振动,组合实现聚美的抢购页的闹钟效果。

    首先,我们来看看自定义View的重要性。在Android中,系统提供了一系列的标准View,但它们可能无法满足所有设计需求。自定义View允许开发者根据项目需要创建新的UI元素。在这个案例中,我们需要一个能够显示雷达扫描...

    Android类似正态分布图表

    在本教程中,我们将讨论如何在Android应用中自定义一个View来实现类似正态分布图的曲线,并添加动画效果。 首先,我们需要理解正态分布的基本概念。正态分布是一种连续概率分布,其特征是所有数据集中在均值周围,...

Global site tag (gtag.js) - Google Analytics