Android项目杰尼杰尼(极简番茄工作法)的学习准备之Android时钟

这篇学习笔记详述了为实现Android项目杰尼杰尼中的番茄钟功能,如何设计和绘制Android时钟。内容包括需求分析、绘制过程、自适应和计时等步骤,通过ondraw()方法实现时钟的动态更新,并自定义时钟属性。
摘要由CSDN通过智能技术生成

这是一篇学习笔记,因为期末项目的杰尼杰尼(极简番茄工作法),为了实现其中的番茄钟功能,学习了如何实现Android时钟。

Android时钟

先来看看实现效果的动图。
在这里插入图片描述

需求分析

在这里插入图片描述
首先,来看一张我家里的时钟的照片,以此确定好需求分析,我们需要:
1.一个圆形的表盘;
2.有大的12个刻度,每个大刻度下有五个小刻度
3.有三根长短不一的针,最短

绘制过程

1.绘制出大圆盘作为时钟的表盘
2.绘制出四个重要刻度点的数字
3.绘制三根指针

其他步骤

1.做自适应
2.自定义时钟属性
3.开启计时

实现过程

那么开始具体的实现过程,使用**ondraw()**方法来实现绘制过程。

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // 坐标原点移动到View 中心
        canvas.translate(mCenterX, mCenterY);
        // 绘制时钟的圆形和刻度
        drawCircle(canvas);
        // 绘制特殊时刻(12点、3点、6点、9点)的数字
        drawText(canvas);
        // 绘制指针
        drawPointer(canvas);
    }

1.绘制时钟的圆形和刻度

/**
     * 绘制时钟的圆形和刻度
     */
    private void drawCircle(Canvas canvas) {

        mDefaultPaint.setStrokeWidth(mDefaultScaleWidth);
        mDefaultPaint.setColor(mClockColor);
       // 画圆
        canvas.drawCircle(0, 0, mRadius, mDefaultPaint);

        for (int i = 0; i < 60; i++) {
            if (i % 5 == 0) { // 特殊时刻

                mDefaultPaint.setStrokeWidth(mParticularlyScaleWidth);
                mDefaultPaint.setColor(mColorParticularyScale);

                canvas.drawLine(0, -mRadius, 0, -mRadius + mParticularlyScaleLength, mDefaultPaint);

            } else {          // 一般时刻

                mDefaultPaint.setStrokeWidth(mDefaultScaleWidth);
                mDefaultPaint.setColor(mColorDefaultScale);

                canvas.drawLine(0, -mRadius, 0, -mRadius + mDefaultScaleLength, mDefaultPaint);

            }
            canvas.rotate(6);
        }
    }
总结:

1.画刻度线时,分为两种,一种的普通刻度线,也就是每分钟的刻度线;另一种就是每小时的刻度线,也就是每隔5歌绘制一个特俗刻度线。
2.采用canvas.drawCircle(0, 0, mRadius, mDefaultPaint);来画圆。
3.因为一圈是360度,一共有60分钟,所以每个刻度线就是6度;则采用canvas.rotate(6)旋转6度来绘制刻度线。

2.绘制特殊时刻(12点、3点、6点、9点)的数字

    /**
     * 绘制特殊时刻(12点、3点、6点、9点)的文字
     */
    private void drawText(Canvas canvas) {

        setTextPaint();

        Paint.FontMetrics fontMetrics = mTextPaint.getFontMetrics();

        // 文字顶部与基线距离
        float ascent = Math.abs(fontMetrics.ascent);
        // 文字底部与基线距离
        float descent = Math.abs(fontMetrics.descent);
        // 文字高度
        float fontHeight = ascent + descent;
        // 文字竖直中心点距离基线的距离;
        float offsetY = fontHeight / 2 - Math.abs(fontMetrics.descent);
        // 文字宽度
        float fontWidth;

        /
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值