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. ...
随机推荐
- 「小程序JAVA实战」小程序我的个人信息-注销功能(42)
转自:https://idig8.com/2018/09/06/xiaochengxujavashizhanxiaochengxuwodegerenxinxi-zhuxiaogongneng40/ 注 ...
- 3DMAX导出FBX的烘焙动画选项
勾选了 [烘焙动画]选项时,表示由骨骼动画塌陷为逐帧动画,这样的结果就是:导出的动画确保是正确的,但体积增大,这是骨骼动画与逐帧去画的区别所在. 如果不勾选此选项,则导出的是骨骼动画,可能出现一些问题 ...
- 一条跨库更新数据的sql
UPDATE [db1].[dbo].[R_ResAndBook] SET SectionID=TT2.newsecidFROM [SmartCampus].[dbo].[R_ResAndBo ...
- C#匿名类型 - Anonymous Types
[C#匿名类型 - Anonymous Types] Anonymous types provide a convenient way to encapsulate a set of read-onl ...
- SaltStack 运行机理特点
SaltStack 运行机理特点 1.实时通讯(REAL-TIME COMMUNICATION) 所有 Salt minions 接收命令都是同时的,这意味着控制 10 个或者 10000 个系统所消 ...
- 前端 webpack
前端 webpack http://www.cnblogs.com/lvdabao/
- js使用浏览器的另存为下载文件
页面上的页面如下: 我需要根据返回的url下载文件: js: //判断浏览器类型 function myBrowser(){ var userAgent = navigator.userAgent; ...
- unity与android交互总结
http://www.jianshu.com/p/4739ce2f4cd1 http://www.cnblogs.com/suoluo/p/5443889.html http://www.th7.cn ...
- Ztree右键事件,如何让指定的子节点不显示右键菜单。
这里我记录一下我自己的解决方案: 1.首先在Ztree的setting设置中加一个鼠标右键回调函数onRightClick,然后在加一个beforeRightClick(具体含义可以看官方API) v ...
- sourcetree免注册方法
step1: https://www.sourcetreeapp.com/官网下载windows版软件 step2: 右键-->以管理员身份运行,便安装成功了 step3: 安装好之后会有这么一 ...