Android仿小米时钟

最近在学自定义View,看到小米时钟这个效果,很想去了解一下是界面是如何绘制以及秒针,分针,时针是如何转动的,还有那个弧形颜色渐变效果。这是我参照Github上的效果弄的,Github地址:高仿小米时钟

首先看一下效果图,

 直接看代码,说明注释已添加。

package com.example.threeversionasproject.widget;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.SweepGradient;
import android.support.annotation.Nullable;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;

import com.example.threeversionasproject.DensityUtils;
import com.example.threeversionasproject.R;

import java.util.Calendar;

/**
 * Created by Ocean on 2019/3/15.
 */

public class MiClockView extends View {

    /* 时钟半径,不包括padding值 */
    private float mRadius;
    
    /*当前画布*/
    private Canvas mCanvas;
    
    
    /*刻度线画笔*/
    private Paint linePaint;
    /* 刻度线长度 */
    private float mLineLength;
    /* 刻度线颜色 */
    private int mLineColor;
    
    /* 外层圆弧画笔 */
    private Paint mOutCirclePaint;
    /* 外层圆弧画笔 颜色 */
    private int mOutArcColor;
    /* 外层圆弧的外接矩形 */
    private RectF mOutRect = new RectF();
    
    /* 外环字体画笔 */
    private TextPaint mTextPaint;
    /* 外环字体颜色 */
    private int mTextColor;
    /*外环字体尺寸*/
    private float mTextSize;
    /* 字体外接矩形 */
    private Rect mTextRect = new Rect();
   

    /* 梯度扫描渐变 */
    private SweepGradient mSweepGradient;
    /* 渐变矩阵,作用在SweepGradient */
    private Matrix mGradientMatrix;
    
    /* 刻度圆弧画笔 */
    private Paint mLineArcPaint;
    /* 刻度圆弧的外接矩形 */
    private RectF mLineArcRectF = new RectF();
    

    /*用于分针、秒针、时针色 */
    private int mHourNeedleColor;
    private int mMinuteNeedleColor;
    private int mSecondNeedleColor;
    
    
    /* 加一个默认的padding值,为了防止用camera旋转时钟时造成四周超出view大小 */
    private float mDefaultPadding;
    private float mPaddingLeft;
    private float mPaddingTop;
    private float mPaddingRight;
    private float mPaddingBottom;

    /* 时针画笔 */
    private Paint mHourHandPaint;
    /* 分针画笔 */
    private Paint mMinuteHandPaint;
    /* 秒针画笔 */
    private Paint mSecondHandPaint;
    
    /* 时针角度 */
    private float mHourDegree;
    /* 分针角度 */
    private float mMinuteDegree;
    /* 秒针角度 */
    private float mSecondDegree;

    /* 时针路径 */
    private Path mHourHandPath = new Path();
    /* 分针路径 */
    private Path mMinuteHandPath = new Path();
    /* 秒针路径 */
    private Path mSecondHandPath = new Path();
    

    public MiClockView(Context context) {
        super(context);
    }

    public MiClockView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        TypedArray ta = context.obtainStyledAt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值