美文网首页Android学习
小米手环 计步数据的展示View

小米手环 计步数据的展示View

作者: Gersy | 来源:发表于2016-11-21 11:19 被阅读645次

废话少说,先来张效果图


源码下载,欢迎Star
刻度线的绘制:

private void drawnLine(Canvas canvas) {
    for (int i = 0; i < 360; i++) {
        int startX = mCenterX;
        int startY = mCenterY - mRadius + mStrokeWidth / 2;
        int stopX = mCenterX;
        int stopY = startY + mLineDistance;
        canvas.drawLine(startX, startY, stopX, stopY, mPaint);
        //如果数字是正数, 那么表示向右旋转,在这个地方开始作画
        canvas.rotate(1f, mCenterX, mCenterY);
    }
}

进度条的动画绘制

private void resultLoading() {
    final float startDegree = 0f;
    float endDegree = getDegree(mProgress);
    resultAnim = ValueAnimator.ofFloat(startDegree,endDegree);
    resultAnim.setDuration(1000);
    resultAnim.setInterpolator(new LinearOutSlowInInterpolator());
    resultAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            float newValue = (float) animation.getAnimatedValue();
            rotateDegree = newValue;
            invalidate();
        }
    });
    resultAnim.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            isLoadingResult = true;
        }
    });
    resultAnim.start();
}

数据加载动画的绘制

private void startLoading() {
    final float startDegree = 0f;
    final float endDegree = 360f;
    secondAnim = ValueAnimator.ofFloat(startDegree, endDegree);
    secondAnim.setDuration(1000);
    secondAnim.setInterpolator(new LinearOutSlowInInterpolator());
    secondAnim.setRepeatMode(ValueAnimator.RESTART);
    secondAnim.setRepeatCount(ValueAnimator.INFINITE);
    secondAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

        private float lastDrawValue = 0;
        private float drawInterval = 0.1f;

        private float lastUpdatePointerValue = 0;
        private float updatePointerInterval = 360 / 60 * 5;

        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            float newValue = (float) animation.getAnimatedValue();
            float increasedPointerValue = newValue - lastUpdatePointerValue;
            if (increasedPointerValue < 0) {
                increasedPointerValue = endDegree + increasedPointerValue;
            }
            if (increasedPointerValue >= updatePointerInterval) {
                lastUpdatePointerValue = newValue;
            }
            float increasedDrawValue = newValue - lastDrawValue;
            if (increasedDrawValue < 0) {
                increasedDrawValue = endDegree + increasedDrawValue;
            }
            if (increasedDrawValue >= drawInterval) {
                lastDrawValue = newValue;
                rotateSecondPointer += increasedDrawValue;
                invalidate();
            }
        }
    });
    secondAnim.start();
}

源码下载
参考项目:
MiClockView

相关文章

  • 小米手环 计步数据的展示View

    废话少说,先来张效果图 源码下载,欢迎Star刻度线的绘制: 进度条的动画绘制 数据加载动画的绘制 源码下载参考项...

  • 小米手环2 上手体验

    小米手环可以看时间、测心率、计部、检测睡眠等。 惊喜点: 1.手环可以记录睡着和醒来的时间,很惊喜。 2.可以测量...

  • MVC、MVCS、MVVM

    MVC(Model,View,Controller) Controller:数据加工 View:数据展示 Mode...

  • 自定义View(三),仿小米运动计步

    前面主要说了自定义View的一些知识,这篇文章主要是利用自定义View做一个仿小米运动计步功能的控件,如下图所示:...

  • 黑加手环深度测评:彩屏、交通卡、门卡、米家联动、短信、心率

    Hey+手环配备了目前以及未来手环市场的主流功能与应用——手表、计步、睡眠、心率、门卡、交通卡等等。在继承手环轻便...

  • 今天走了多少步

    我感觉我的手环计步偏多,早晨在家没怎么动,就计上了好几百步,不知道它计步的依据是什么。 刚才点开APP,系统自动同...

  • 小米手环 7 pro将于7月4日发布,你会买吗?

    小米手环7上市不到两个月,小米手环7pro又即将于7月4日发布。这打破了小米手环的发布规律。 按照以往,小米手环每...

  • 瘦身打卡100天-第3天

    昨晚临睡称重63.2kg,今早起床称重62.8kg。昨晚只睡了不到5个小时(小米手环记录有7个小时,小米手环数据记...

  • 为什么你会用小米手环

    在小米手环出现之前,已经有很多手环出现了。但是为什么到现在为止,我见到的人,80%是带的小米手环。 小米手环当年在...

  • 听说你想买小米手环2

    2014年小米发布了他的第一款手环,到今年的小米手环2已经有三款产品上市了。他们分别是小米手环,小米手环光感版及小...

网友评论

本文标题:小米手环 计步数据的展示View

本文链接:https://www.haomeiwen.com/subject/behupttx.html