Android 画闹钟

1.今天就来模仿一下这个小闹钟的

2.思路:

  • 先画闹钟的圆盘 ,在通过Path来画指针
  • 两个耳朵其实就是用两个圆被一个大圆截取后留下的,并旋转一定度数后生成

3.直接上代码:

  

 1 public class AlarmClockView extends View {
 2
 3     private static final PorterDuff.Mode MODE = PorterDuff.Mode.DST_OUT;
 4     /**
 5      * 屏幕适应性参数
 6      */
 7     private static final float BIG_RADIU = 1 / 6F;
 8     private static final float SMALL_RADIU = 1 / 12F;
 9     private static final float CLOCKWISE_LENGTH = 1 / 10F;
10     private static final float MINUTE_LENGTH = 1 / 12f;
11     private static final float MASK_RADIU = 1 / 4F;
12
13     // 大圆盘圈
14     private Paint mPaint;
15     // 指针Paint
16     private Paint zhenPaint;
17     // 小圆Paint
18     private Paint smallCirclePaint;
19     private Path path;
20     private int screenW, screenH;
21     /**
22      * 大圆半径
23      *
24      * @param context
25      */
26     private float radius_big, small_radiu, clockwise_length, minute_length,
27             mask_radiu;
28
29     public AlarmClockView(Context context) {
30         super(context);
31     }
32
33     public AlarmClockView(Context context, AttributeSet attrs) {
34         super(context, attrs);
35
36         mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
37         mPaint.setStyle(Paint.Style.STROKE);
38         mPaint.setColor(Color.WHITE);
39         mPaint.setStrokeWidth(40);
40
41         zhenPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
42         zhenPaint.setStyle(Paint.Style.STROKE);
43         zhenPaint.setColor(Color.WHITE);
44         zhenPaint.setStrokeWidth(20);
45
46         smallCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
47         smallCirclePaint.setStyle(Paint.Style.FILL);
48         smallCirclePaint.setColor(Color.WHITE);
49
50         screenW = new MeasureUtil().getWindowWidth(context);
51         screenH = new MeasureUtil().getWindowHeigh(context);
52
53         int size = Math.min(screenW, screenH);
54         radius_big = size * BIG_RADIU;
55         small_radiu = size * SMALL_RADIU;
56         clockwise_length = size * CLOCKWISE_LENGTH;
57         minute_length = size * MINUTE_LENGTH;
58         mask_radiu = size * MASK_RADIU;
59         // 设置指针
60         path = new Path();
61         path.moveTo(screenW / 2, screenH / 2 + 10);
62         path.lineTo(screenW / 2, screenH / 2 - clockwise_length + 10);
63         path.moveTo(screenW / 2 - 10, screenH / 2 + 10);
64         path.lineTo(screenW / 2 + minute_length, screenH / 2 + 10);
65     }
66
67     @Override
68     protected void onDraw(Canvas canvas) {
69         super.onDraw(canvas);
70         canvas.drawColor(Color.argb(255, 255, 128, 103));
71
72         canvas.drawCircle(screenW / 2, screenH / 2, radius_big, mPaint);
73         canvas.drawPath(path, zhenPaint);
74
75         // 画耳朵圆
76         drawEarCircle(canvas, 30);
77         drawEarCircle(canvas, -30);
78
79     }
80
81     private void drawEarCircle(Canvas canvas, int degree) {
82         int layerID = canvas.saveLayer(0, 0, screenW, screenH, null,
83                 Canvas.ALL_SAVE_FLAG);
84         canvas.rotate(degree, screenW / 2, screenH / 2);
85         canvas.drawCircle(screenW / 2, screenH / 2 - radius_big - small_radiu,
86                 small_radiu, smallCirclePaint);
87         // 用一个大圆去遮罩
88         PorterDuffXfermode xfermode = new PorterDuffXfermode(MODE);
89         smallCirclePaint.setXfermode(xfermode);
90         canvas.drawCircle(screenW / 2, screenH / 2, mask_radiu,
91                 smallCirclePaint);
92         smallCirclePaint.setXfermode(null);
93         canvas.restoreToCount(layerID);
94     }
95
96 }

4.运行后的效果是:

  

  

时间: 2024-10-21 15:08:55

Android 画闹钟的相关文章

基于Android的闹钟的软件

一.本课题要求:设计一个基于Android的闹钟的软件. 实现的功能有:能通过界面设置闹钟的启动条件建立后台服务进程,当满足触发条件时,闹钟响应相应事件. 二.需求分析 该课题实现在手机操作系统Android闹钟提醒功能,携带方便,使用起来灵活.快捷.省心,是一款实用的手机软件.“手机闹钟”可以在后台运行,且能和普通闹钟一样设置多个位置闹铃,有良好的人机交互界面,可对其编辑.启用或禁用,关键在于可以自定义设置取消闹钟的操作. (1)系统体系结构包括:添加闹铃.设置时间.重复等,闹铃提醒方式,返回

Android重复闹钟(每天)的实现

MainActivity如下: package cc.cc; import java.util.Calendar; import java.util.Locale; import android.os.Bundle; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; import androi

关于Android的闹钟

Android的闹钟依赖两个组件.一个是AlarmManager一个是Calendar. 先说Calendar,Calendar是一个非常方便的时间日期管理容易,它存放了日期时间信息,并且可以以各种体位set和get. Calendar的使用可以分为以下几步 1.获得Calendar实例 Calendar calendar = Calendar.getInstance(); 2.设置或者获得日期+时间 calendar.set(Calendar.HOUR_OF_DAY,3); calendar.

Android 画个圆 淡入淡出

private class SimpleView extends ImageView{ int point_x; int point_y; int radius = 0; public SimpleView(Context context) { super(context); // TODO Auto-generated constructor stub } @Override public boolean onTouchEvent(MotionEvent event) { point_x =

Android画柱状图,圆形图和折线图的demo

效果图如下: demo下载地址:http://files.cnblogs.com/hsx514/wireframe.zip Android画柱状图,圆形图和折线图的demo

Android 画个电池出来(Paint和canvas)

1.Android中很多时候都要自己去画一个自定义控件出来,就需要用到Paint和Canvas这两个类. 2.效果图: 3.直接上代码: 1 public class BatteryView extends View { 2 3 private Paint mBatteryPait; 4 private Paint mPowerPaint; 5 private float mBatteryStroke = 2.0f; 6 7 /** 8 * 屏幕的高宽 9 * 10 * @param conte

android 画虚线、实线,画圆角矩形,一半圆角

1.画虚线,实线: 建立dotted_line_gray.xml文件放在drawable文件夹下面. android:shape="line" 可以修改你想要的形状 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape=&quo

android 画虚线

用到的工具类: DashPathEffect android中对该类的说明如下: 翻译一下就是: 第一个参数intervals数组必须是偶数个元素(个数>=2),偶数下标代表实线,奇数下标代表空白长度 第二个参数phase:向左偏移量(偏移量=phase mod (intervals数组各项之和), 即取余运算) 注意:只有当Paint的style设置为STROKE或者FILL_AND_STROKE时才能绘制出虚线效果,如果Paint的style设置为FILL时是不会起作用的. /** * Th

Android画折线图、柱状图、饼图(使用achartengine.jar)

自从用了画折线的jar包之后,就不想再用canvas画布去画了,编程就是要站在巨人的肩膀上. 所需要的jar包achartenginejar 折线代码布局文件就不上传了很简单 另一种线的渲染器 扇形图代码 柱状图代码 属性总结部分代码 新测试代码下载地址 所需要的jar包:achartengine.jar 下载地址:http://download.csdn.net/detail/zhengyikuangge/9460642 折线代码(布局文件就不上传了,很简单): package com.exa