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. ...
随机推荐
- Python 小知识点(6)--静态方法、类方法、属性方法
(1)静态方法-->-@staticmethod装饰类中方法 只是名义上归类管理, 实际上在静态方法里访问不了类或实例中的任何属性 class Dog(object): def __init__ ...
- mysql和php的内存问题
最近给一个客户把他以前的数据转换到PHPSMC里去,因为他的数据太大出现一些问题,首先出现的是php内存问题,刚导时空白,我就在该也面的头部加上 error_reporting(E_ALL);打印所有 ...
- Halcon中循环读取文件的实现以及数字与字符的转换
在循环读取文件的位置时,常用到数字与字符的转换. 数字与字符的转换 将字符转换为数字 tuple_number(StringImageIndex,IntImageIndex)` 1 2 1 2 将数字 ...
- Adjacent Bit Counts(uvalive)
For a string of n bits x1, x2, x3,…, xn, the adjacent bit count of the string (AdjBC(x)) is given by ...
- Keepalive VIP 故障
前端环境如下: Nginx + Keepalived ( MASTER ) --> node * | | Cisco ASA --> VIP 1.18 | | Nginx + Keepal ...
- ES6中新添加的Array.prototype.fill
用法 array.fill(start=0, end=this.length) 示例 [1, 2, 3].fill(4) // [4, 4, 4] [1, 2, 3].fill(4, 1) // [1 ...
- 通过Curl 对url进行encode操作
最近做项目的时候,通过 Gflags Reload 时候 发现对于某些value中包含=%中文等字符的支持不够好,value被截断了. 经过分析后,发现程序对url切分是用=&为标准的,如果v ...
- Python面向对象相关知识1
1. python是动态的语言,这样在使用类的时候,类的属性就可以随意的添加,但是这样在实际开发中有一定的缺陷,所以,可以在类中定义一个特殊的__init__()方法,当创建实例时,__init__( ...
- 阻塞和唤醒线程——LockSupport功能简介及原理浅析
目录 1.LockSupport功能简介 1.1 使用wait,notify阻塞唤醒线程 1.2 使用LockSupport阻塞唤醒线程 2. LockSupport的其他特色 2.1 可以先唤醒线程 ...
- ArcGIS js api三种查询功能
转自https://blog.csdn.net/lovecarpenter/article/details/52669777