- 浏览: 634540 次
文章分类
最新评论
-
树下白狐:
listview与adapter用法 -
u011467537:
...
Android背景渐变色(shape,gradient) -
asdf12343800:
asdf12343800 写道asdf12343800 写道a ...
Android背景渐变色(shape,gradient) -
asdf12343800:
asdf12343800 写道asdf12343800 写道 ...
Android背景渐变色(shape,gradient) -
asdf12343800:
asdf12343800 写道 : lol: fghhg
Android背景渐变色(shape,gradient)
1. Android时钟,效果图:
2. 时钟所需资源:
(1)时钟表盘:
(2)时钟时针:
(3)时钟分针和秒针:
3. 代码实现:
[java:firstline[1]] view plaincopy
- package com.android.clockview;
- 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.Paint;
- import android.graphics.drawable.BitmapDrawable;
- import android.os.Bundle;
- import android.os.Handler;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.LinearLayout;
- public class ClockView extends Activity {
- private final int FP = ViewGroup.LayoutParams.FILL_PARENT;
- private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;
- private QAnalogClock clock1;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- LinearLayout lLayout = new LinearLayout(this);
- lLayout.setLayoutParams(new LinearLayout.LayoutParams(FP, FP));
- lLayout.setOrientation(LinearLayout.VERTICAL);
- clock1 = new QAnalogClock(this, "GMT+8:00");
- lLayout.addView(clock1, new LinearLayout.LayoutParams(WC, WC));
- setContentView(lLayout);
- }
- class QAnalogClock 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;
- int mTempHeigh;
- int centerX;
- int centerY;
- int availableWidth = 100;
- int availableHeight = 100;
- private String sTimeZoneString;
- public QAnalogClock(Context context, String sTime_Zone) {
- super(context);
- sTimeZoneString = sTime_Zone;
- mBmpHour = BitmapFactory.decodeResource(getResources(),
- R.drawable.android_clock_hour);
- bmdHour = new BitmapDrawable(mBmpHour);
- mBmpMinute = BitmapFactory.decodeResource(getResources(),
- R.drawable.android_clock_minute);
- bmdMinute = new BitmapDrawable(mBmpMinute);
- mBmpSecond = BitmapFactory.decodeResource(getResources(),
- R.drawable.android_clock_minute);
- 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();
- }
- }
- }
- }
发表评论
-
android layout查找顺序
2013-01-07 14:11 1148layout可以按后缀支持多分辨率,分辨率layout-mdp ... -
listview与adapter用法
2012-09-11 08:59 97438一个ListView通常有两 ... -
intent 传值
2012-09-11 08:58 1087intent.putExtra()存 getInten ... -
android(java)控制http连接超时的问题
2012-09-10 15:39 1532"声明一个boolean公共变量,表明当前httpc ... -
android 设置http等待超时
2012-09-10 15:39 11613BasicHttpParams httpPar ... -
android 设置椭圆
2012-09-10 15:39 2342<shape xmlns:android=& ... -
Android 自定义Button按钮显示样式(正常、按下、获取焦点)
2012-09-10 15:39 1297首先写一个定义Button样式的XML文件:新建Andr ... -
如何检查Android网络连接状态
2012-09-10 15:40 8703在发送任何HTTP请求前最 ... -
android 按两次返回键退出
2012-09-07 11:12 5383package com.anjoyo.test; ... -
Android Animation(二)
2012-09-07 10:58 951关于动画的实现,Andr ... -
activity切换动画
2012-09-07 10:55 4188在介绍切换动画效果前,先介绍下将使用到的Android ... -
android 震动
2012-09-07 10:02 2065让手机震动,需要创建Vibrator对象,通过调用vi ... -
android.R.layout下有一些常量存在哪?
2012-09-07 00:35 1162在你的android SDK目录下可以看到 例如 你的 and ... -
Android禁止横屏竖屏切换
2012-09-05 13:43 994在Android中要让一个程序的界面始终保持一个方向,不 ... -
ListView滚动加载(类似Android Market的列表)
2012-09-04 21:08 1764ListView滚动加载(类似Android Mark ... -
android 设置EditText只能输入数字
2012-09-03 23:23 47697android:numeric="intege ... -
填充Listview第一个Item的分隔线
2012-08-31 15:53 63181. 在res/drawable/目录下新建 mygra ... -
android相对父控件比例
2012-08-31 15:39 971shape xml中的gradient能用 70%p 这 ... -
分割线样式
2012-08-31 14:09 1091android给listview设置分割线Divider ... -
android timer
2012-08-31 09:01 884Timer timer=new Timer; timer.s ...
相关推荐
Android 时钟 Widget Demo
Android时钟适应所有分辨率 public float[] getDrawXY(double x,double y,double d,double angle){ float dx = (float) (x+d*Math.cos(angle * Math.PI / 180)); float dy = (float) (y+d*Math.sin(angle * Math...
android时钟widget小部件源代码
ClockView —— 简单的Android时钟控件
Eclipse V4.2.0编写的Android时钟应用实例(有用到线程)。
本源码中包含三个时钟代码:更改系统时钟__Runable实现;更改系统时钟__TimerTask实现;自定义动画时钟__RotateAnimation实现
Android时钟控件
时钟事件处理,显示签到时间,初学者实用。 android:id="@+id/analogClock01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"/> ...
android时钟的图片资源,可以在android开发中使用
自定义android时钟view,可以随布局自动适配
android 时钟的demo应用.本资源是整个网上已有资源
Android横屏时钟程序的AndroidStudio项目 可以显示当前时间、日期、变换颜色 供学习参考用
android翻页时钟,类似于htc时钟插件那种效果
一款android的桌面时钟例子,附带源代码
主要用于实现搭载Android系统的手机,平板,电视机顶盒设备上运行时钟显示的功能, 让简直设备活起来,实现它存在的价值。 如果你觉得可以,请在此项目基础上添加更多功能,例如定时闹钟,天气预报等练习开发, 本...
Eclipse V4.2.0用新建Runnable的方法编写的Android数字时钟应用实例。
Android自定义时钟,这是别人的开源项目,写的很不错,更多请看我的博客:http://blog.csdn.net/xiayiye5/
一个继承系统中的时钟完成的时钟小插件,主要由TimerTask来实现
该代码是一个android介绍时间签到的应用范例,说明模拟时钟和数字时钟是如何设计的。 该代码实现的功能:主界面包含2种时钟创作套件Widget。还有“签到时间”Button,点击“签到时间”按钮时,在签到时间字段上显示...
《我的一天时钟》Android生活类应用是一个极其有用的概念性时间提醒工具,他用一个容器来代表一天,向里面填充东西来代表一天的时间的过去,用这样的概念形式让每个人充分知道时光的流逝,珍惜好每天的每时每刻,让...