Android 画闹钟
1.今天就来模仿一下这个小闹钟的
2.思路:
- 先画闹钟的圆盘 ,在通过Path来画指针
- 两个耳朵其实就是用两个圆被一个大圆截取后留下的,并旋转一定度数后生成
3.直接上代码:
public class AlarmClockView extends View {
private static final PorterDuff.Mode MODE = PorterDuff.Mode.DST_OUT;
/**
* 屏幕适应性参数
*/
private static final float BIG_RADIU = 1 / 6F;
private static final float SMALL_RADIU = 1 / 12F;
private static final float CLOCKWISE_LENGTH = 1 / 10F;
private static final float MINUTE_LENGTH = 1 / 12f;
private static final float MASK_RADIU = 1 / 4F;
// 大圆盘圈
private Paint mPaint;
// 指针Paint
private Paint zhenPaint;
// 小圆Paint
private Paint smallCirclePaint;
private Path path;
private int screenW, screenH;
/**
* 大圆半径
*
* @param context
*/
private float radius_big, small_radiu, clockwise_length, minute_length,
mask_radiu;
public AlarmClockView(Context context) {
super(context);
}
public AlarmClockView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setColor(Color.WHITE);
mPaint.setStrokeWidth(40);
zhenPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
zhenPaint.setStyle(Paint.Style.STROKE);
zhenPaint.setColor(Color.WHITE);
zhenPaint.setStrokeWidth(20);
smallCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
smallCirclePaint.setStyle(Paint.Style.FILL);
smallCirclePaint.setColor(Color.WHITE);
screenW = new MeasureUtil().getWindowWidth(context);
screenH = new MeasureUtil().getWindowHeigh(context);
int size = Math.min(screenW, screenH);
radius_big = size * BIG_RADIU;
small_radiu = size * SMALL_RADIU;
clockwise_length = size * CLOCKWISE_LENGTH;
minute_length = size * MINUTE_LENGTH;
mask_radiu = size * MASK_RADIU;
// 设置指针
path = new Path();
path.moveTo(screenW / 2, screenH / 2 + 10);
path.lineTo(screenW / 2, screenH / 2 - clockwise_length + 10);
path.moveTo(screenW / 2 - 10, screenH / 2 + 10);
path.lineTo(screenW / 2 + minute_length, screenH / 2 + 10);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.argb(255, 255, 128, 103));
canvas.drawCircle(screenW / 2, screenH / 2, radius_big, mPaint);
canvas.drawPath(path, zhenPaint);
// 画耳朵圆
drawEarCircle(canvas, 30);
drawEarCircle(canvas, -30);
}
private void drawEarCircle(Canvas canvas, int degree) {
int layerID = canvas.saveLayer(0, 0, screenW, screenH, null,
Canvas.ALL_SAVE_FLAG);
canvas.rotate(degree, screenW / 2, screenH / 2);
canvas.drawCircle(screenW / 2, screenH / 2 - radius_big - small_radiu,
small_radiu, smallCirclePaint);
// 用一个大圆去遮罩
PorterDuffXfermode xfermode = new PorterDuffXfermode(MODE);
smallCirclePaint.setXfermode(xfermode);
canvas.drawCircle(screenW / 2, screenH / 2, mask_radiu,
smallCirclePaint);
smallCirclePaint.setXfermode(null);
canvas.restoreToCount(layerID);
}
}
4.运行后的效果是:

Android 画闹钟的更多相关文章
- Android 实现闹钟功能
原文地址:Android 实现闹钟功能作者:Android_Learners 一.手机闹钟主要用到了AlarmManager类,AlarmManager类提供了访问系统定时服务的途径,开发人员可以 ...
- 基于Android的闹钟的软件
一.本课题要求:设计一个基于Android的闹钟的软件. 实现的功能有:能通过界面设置闹钟的启动条件建立后台服务进程,当满足触发条件时,闹钟响应相应事件. 二.需求分析 该课题实现在手机操作系统And ...
- android 画虚线、实线,画圆角矩形,一半圆角
1.画虚线,实线: 建立dotted_line_gray.xml文件放在drawable文件夹下面. android:shape="line" 可以修改你想要的形状 <?xm ...
- Android 小闹钟程序
最近写了个闹钟的程序,看到SharedPreferences在一个程序中可以共享数据,SharedPreferences是一个轻量级的键值存储机制,只可以存储基本数据类型.我就拿来用用,没想到Shar ...
- android画虚线的自定义VIew
package com.yesway.ycarplus.view; import android.annotation.SuppressLint; import android.content.Con ...
- Android画一个随意拖动的圆形
import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactor ...
- Android 获取闹钟引发的血案
想做一个锁屏的软件.锁屏后可以显示闹钟信息. 一开始的思路是通过android content provider获取 mActivityObject.getContentResolver().quer ...
- Android 画个电池出来(Paint和canvas)
1.Android中很多时候都要自己去画一个自定义控件出来,就需要用到Paint和Canvas这两个类. 2.效果图:
- Android反复闹钟(每天)的实现
MainActivity例如以下: package cc.cc; import java.util.Calendar; import java.util.Locale; import android. ...
随机推荐
- C# 在根据窗体中的表格数据生成word文档时出错
出错内容为:
- 关于在Arduino中调用DS1302模块
DS1302时钟模块中的电池是起掉电保存作用的,在实际运行中必须给他的GND和VCC供电,否则得到的是错误的时间. 也就是说,电池是保存日期的,而无法提供芯片正常运行所需的电力. 从芯片引脚上可以看出 ...
- re模块之re.match
re模块--python 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达 ...
- Nginx负载均衡高可用
1. Nginx负载均衡高可用 首先介绍一下Keepalived,它是一个高性能的服务器高可用或热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实 ...
- FP回写报错
报错信息如下: 提示java for mo 2022报错 执行的DTS如下: 解决方法:(原因:SAP归档日志满了,导致连接失败)1.检查表temp_out_pr中的siteid是否有三个工厂的数据确 ...
- iOS调试程序的方法
IOS各种调试技巧豪华套餐 普通操作 如图3 基本的断点操作如下 图4 点击那个黑列列就创建了一个断点,再次点击就临时取消这个断点(但是不删除),长按那个断点拖出去就删除了(mac os的系统工程师就 ...
- Java中文乱码解决方案
Java中文乱码解决方案 1.中文乱码解决方案,确保每个文件的默认编码是UTF-8 加入 URIEncoding="UTF-8" 代码中的设置 1>在se ...
- 导入txt文件到SQL SERVER 2008
最近在学习数据库,想要试处理大量数据.大量的数据手动输入是不可能的了,所以需要导入.本人上网看了不少的教程,然后下载了txt格式的一万条彩票开奖记录数据.但是把这些数据导入到SQL Server 20 ...
- static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较
隐式转换(implicit conversion) ; int b; b=a; short是两字节,int是四字节,由short型转成int型是宽化转换(bit位数增多),编译器没有warning,如 ...
- [GO]goexit的使用
package main import "fmt" func test() { defer fmt.Println("cccccccccccc")//在函数退出 ...