画个钟,用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实现动画时钟"就是一个很好的示例,它展示了如何利用自定义View和ValueAnimator来创建一个实时更新并带有动画效果的时钟组件。 首先,自定义View通常涉及到以下几个步骤: 1. **创建View...
本文将深入探讨如何在Android环境中实现一个基于代码的自定义时钟组件,特别是聚焦于"MyAnalogClock"这个例子。 首先,我们从基础开始。在Android中,我们可以利用View或ViewGroup来构建自定义视图。对于一个自定义...
首先,我们来看渐变动画。渐变动画分为两种:帧动画和补间动画。帧动画通过连续播放一系列图片来创建动效,常用于游戏或动态图标。补间动画则在两个指定状态之间平滑过渡,如物体颜色、透明度的变化。通过`...
在Android应用开发中,创建一个独特的数字时钟界面可以提升用户体验,同时展示开发者的设计技巧。"android仿锤子数字时钟"项目就是这样一个实例,它模仿了锤子手机(Smartisan OS)中的数字时钟样式。下面,我们将...
- 添加背景和前景色,使钟看起来更美观。 - 增加点击事件,使得用户可以通过点击切换不同样式或功能的钟。 - 优化性能,避免不必要的重绘,比如当秒针移动时,只更新秒针的动画,而不是整个钟面。 最后,记得在布局...
先看下最终的效果 开始实现 新建一个ClockView集成View public class ClockView extends View { } 先重写onMeasure方法,这里要先说一下View的测量模式,一共有三种: 1、EXACTLY 即精确值模式,当我们将控件...
这个项目标题“时间 android 自定义时钟”暗示我们将会探讨如何在Android应用中创建一个定制化的时钟组件。下面将详细介绍这个主题。 首先,让我们了解Android中的时间显示。Android系统提供了许多内置的API来处理...
`AnimationDemo`是一个专为展示Android平台上的各种动画效果而设计的示例项目。这个项目涵盖了透明度变化、伸缩、移动和旋转等多种基本动画类型,帮助开发者理解并实现复杂的UI动态效果。 首先,我们来看透明度变化...
8. **UI动画**:为了让时钟看起来更加生动,开发者可能会使用Android的动画库来创建动态效果,比如指针转动、数字滑动等。 9. **DayNight主题和Material Design**:为了提供良好的用户体验,应用可能遵循Android的...
总之,`TClock`是一个结合了Canvas绘图和事件监听的自定义控件实例,它展示了Android开发中的图形绘制、动画处理和用户交互。通过学习和实践,开发者不仅可以掌握这些基础知识,还能提升自己的编程技巧,为构建更多...
Android提供了ObjectAnimator、ValueAnimator和TweenAnimation等工具,让指针转动看起来更自然流畅。 5. **布局设计**:XML布局文件用于定义用户界面。在这个项目中,可能包含一个自定义的View组件,用于显示自定义...
5. **世界时钟**:Android Clock还支持世界时钟功能,允许用户添加并显示多个城市的时钟。这部分源码涉及地理信息处理、时区转换等,通过TimeZone类获取和设置不同的时区信息。 6. **电源管理**:考虑到时钟在锁屏...
本资源“Android源码——自定义时钟.zip”显然聚焦于如何在Android平台上构建一个自定义的时钟组件。自定义时钟通常涉及到图形绘制、动画效果以及时间更新机制,下面将详细探讨这些关键知识点。 首先,我们来看...
在Remindly项目中,开发者遵循这一规范,使用了相应的UI组件和动画效果,使应用看起来既美观又符合Android用户的使用习惯。 2. **AlarmManager**: Android系统的`AlarmManager`服务用于安排应用程序在特定时间执行...
在Android开发中,"画布:时钟.rar"可能是一个包含源码的压缩包,用于展示如何在Android平台上实现自定义的时钟视图。这个压缩包中的源码可能包括一个自定义View类,该类继承自Android的View或者SurfaceView,并通过...
本文将详细解析"Android时钟"这一主题,特别是如何自定义一个基于背景图片的时钟控件。 一、Android时钟基础 Android系统提供了多种时钟类型,包括数字时钟(DigitalClock)和模拟时钟(AnalogClock)。数字时钟以...
在Android开发中,自定义View是一项重要的技能,它允许开发者根据需求创建独特的用户界面元素。本教程将聚焦于如何利用自定义...通过这个项目,开发者可以深入理解自定义View的工作原理,提升自己的Android开发能力。
首先,我们来看看自定义View的重要性。在Android中,系统提供了一系列的标准View,但它们可能无法满足所有设计需求。自定义View允许开发者根据项目需要创建新的UI元素。在这个案例中,我们需要一个能够显示雷达扫描...
在本教程中,我们将讨论如何在Android应用中自定义一个View来实现类似正态分布图的曲线,并添加动画效果。 首先,我们需要理解正态分布的基本概念。正态分布是一种连续概率分布,其特征是所有数据集中在均值周围,...