自定义View----仿仪表盘的水柱进度条(高度定制化,已通过JitPack发布)

模拟echarts仪表盘进度条 模拟echarts仪表盘进度条 需求:仪表盘的进度条达到不同的角度使用不同的颜色,且颜色是渐变的。某一时刻的静态图如下; 实现思路 在一个容器中画两个图,一个在上作为进度条,另一个在下作为轴线,通过’Z’属性可以控制图的层级。通过动态控制上方图形轴线的endAngle(结束角度)达到进度条的效果。 options { tooltip: { trigger: "item", }, legend: { top: "5%", l 阅读详情

仪表盘进度条

—–已通过JitPack发布
可以自定义的属性:
1.仪表盘半径
2.仪表盘宽度
3.指针大小
4.刻度的密度
5.可触发触摸事件对应设置进度(可选择)
6.进度动画(可选择)
自定义View,最近毕设中要用一个进度条,刚好在UI中国中的一个Demo中发现了这个设计,就把他实现了。

目标

这里写图片描述

实现效果

这里写图片描述

实现思路:

1.仪表盘 = 底盘 + 进度条 + 刻度
底盘:灰色的180度圆弧

进度条:蓝色的圆弧(圆弧度数根据进度的百分比)

刻度:两种实现方式:1.同样是绘制圆弧,但是用的是虚线(效果不理想,放弃)2.利用for循环,绘制一组圆点(半径很小的圆),对应圆心的x,y坐标利用Math.cos和Math.sin计算。
2.指针 = 圆 + 圆点 + 三角形
圆:灰色的圆->指针的轴

圆点:白色的圆点(半径很小的圆)->指针中的圆点

指针:三角形->三角形三个顶点的坐标要随进度不停的变换计算

附加功能:

1.动画效果:利用ValueAnimator+OvershootInterpolator实现动画
2.触摸更新进度:重写setOnTouchListener,获得触摸点的x,y,利用反三角函数计算出角度,重绘。

实现思路还是比较容易的,接下来就是代码的实现了。

关键代码:

1.仪表盘绘制
(1)底盘:

this.paint.setColor(getResources().getColor(R.color.panel_bottom_white));
this.paint.setAntiAlias(true); //消除锯齿
this.paint.setStyle(Paint.Style.STROKE); //绘制空心圆
        /**
         * 绘制仪表盘底色
         */

float x = PANEL_WIDTH / 2;
float y = PANEL_WIDTH / 2;
RectF oval = new RectF(x, y,
                PANEL_WIDTH + 2 * PANEL_RADIUS, 2 * PANEL_RADIUS + PANEL_WIDTH);

this.paint.setStrokeWidth(PANEL_WIDTH);
canvas.drawArc(oval, 180, 180, false, paint);

前三行是画笔paint的属性配置,分别设置了颜色,消除锯齿,绘制空心圆
下面是主要的逻辑,这里是绘制圆弧,有几个关键点需要注意:
1.画笔的中心在线的中心!!!
2.圆弧的绘制是你设置的矩形的内切弧。
明白了这两点这里写图片描述
这幅图应该就很好理解了
x=矩形的left=panel的width/2
y=矩形的top=panel的width/2
矩形的right = panel的width/2+panel的半径+panel的width/2
=panel的width+panel的半径
矩形的bottom=panel的半径*2(圆弧是矩形的内切弧,所以是整个圆,这里是为了说明才画了半个矩形,其实是忘了…)+panel的width(原理同right)

canvas.drawArc(oval, 180, 180, false, paint);这句话有一个地方要注意参数含义,上源码:

     * @param oval       The bounds of oval used to define the shape and size
     *                   of the arc
     * @param startAngle Starting angle (in degrees) where the arc begins
     * @param sweepAngle Sweep angle (in degrees) measured clockwise
     * @param useCenter If true, include the center of the oval in the arc, and
                        close it if it is being stroked. This will draw a wedge
     * @param paint      The paint used to draw the arc
     */
    public void drawArc(@NonNull RectF oval, float startAngle, float sweepAngle, boolean useCenter,
            @NonNull Paint paint) {
        drawArc(oval.left, oval.top, oval.right, oval.bottom, startAngle, sweepAngle, useCenter,
                paint);
    }

所以是从一个度数开始绘制,绘制多少度数
这里有个知识点,原来的一篇文章中提到过仿QQ常驻底部栏播放按钮,就是绘制圆弧的时候,Android默认的是从3点钟方向开始绘制,所以我们要绘制如图所示的圆弧,肯定是从180度开始,绘制180度。
这里写图片描述

(2)进度条

/**
* 绘制仪表盘进度
*/
this.paint.setColor(getResources().getColor(R.color.panel_progress_blue));
this.paint.setAntiAlias(true); //消除锯齿
this.paint.setStyle(Paint.Style.STROKE); //绘制空心圆

    this.paint.setStrokeWidth(PANEL_WIDTH);

    int sweepAngle = (int) (PANEL_PROGRESS / PANEL_MAX * 180.0f);

    canvas.drawArc(oval, 180, sweepAngle, false, paint);
上面那个绘制明白后,进度条就简单了,矩形用的事同一个矩形,唯一不同的就是绘制度数

int sweepAngle = (int) (PANEL_PROGRESS / PANEL_MAX * 180.0f);

代码很好理解,就是根据进度计算角度比例,唯一注意的是**类型转换**

(3)刻度
   /**
     * 绘制仪表盘刻度
     */
    paint.setColor(getResources().getColor(R.color.white));
    paint.setStyle(Paint.Style.FILL);
    paint.setStrokeWidth(PANEL_POINT_RADIUS);

    float startx = x;
    float starty = PANEL_RADIUS + PANEL_WIDTH * 0.75f - PANEL_POINT_RADIUS;

    float radius = PANEL_RADIUS + PANEL_WIDTH / 4;
    //点的密度
    int density = 180 / PANEL_DENSITY;
    float potsx[] = new float[PANEL_DENSITY];
    float potsy[] = new float[PANEL_DENSITY];
    for (int i = 1; i < PANEL_DENSITY; i++) {
        potsx[i] = (float) (startx + (radius * (1 - Math.cos(density * i * Math.PI / 180))));
        potsy[i] = (float) (starty - radius * Math.sin(density * i * Math.PI / 180) + PANEL_POINT_RADIUS);
        canvas.drawCircle(potsx[i], potsy[i], PANEL_POINT_RADIUS, paint);
    }

绘制刻度的原理上面已经说了,就是绘制一组小圆点。
首先计算起始点的坐标

float startx = x;
float starty = PANEL_RADIUS + PANEL_WIDTH * 0.75f - PANEL_POINT_RADIUS;

这里写图片描述
x坐标不用解释了,这里y坐标要说明一下:不要问我为什么是这样得来的,因为我也不知道,我是试出来的……
讲道理:
starty=仪表盘半径+仪表盘宽度/2+刻度点半径(画笔在线宽的中点)
但是我按照这个逻辑来就不讲道理了……没办法,我就试,二分法思想吧…
最后得出上面的逻辑:
starty=仪表盘半径+仪表盘宽度*3/4+刻度点半径
这里写图片描述
后面就是一组点的x,y坐标了,用到一点数学知识,根据图可以看到
x=startx+(radius-radius*cosA)(坐标原点在左上角)
y=starty-radius*sinA
对应的角度A = density * i * Math.PI / 180(density表示点的密度,也就是个数)
但是这里也有个坑,那就是radius的计算,和上面一样,不要问我为什么是这样计算的,因为我也不知道,我是试出来的…
讲道理:
radius = 仪表盘半径+仪表盘宽度/2
然而最后的实现是

 float radius = PANEL_RADIUS + PANEL_WIDTH / 4;

最后一个注意的点事,我是从index=1开始绘制的,不然效果不好
到此为止仪表盘绘制结束了!

2.指针绘制
(1)圆:

/**
         * 绘制底圆
         */
        this.paint.setColor(getResources().getColor(R.color.panel_indicator_color));
        //圆点
        float ix = PANEL_RADIUS + PANEL_WIDTH * 0.75f;
        float iy = PANEL_RADIUS + PANEL_WIDTH * 0.75f - PANEL_POINT_RADIUS;
        canvas.drawCircle(ix, iy, INDICATOR_RADIUS, paint);

圆应该在仪表盘圆的圆心处,但是这里又出现了1/4的问题,同上…形成了定律,反而简单了
圆心x=仪表盘半径+仪表盘宽度
圆心y=仪表盘半径+仪表盘宽度-圆的半径(画笔在中点)
最后的实现:

//圆点
float ix = PANEL_RADIUS + PANEL_WIDTH * 0.75f;
float iy = PANEL_RADIUS + PANEL_WIDTH * 0.75f - PANEL_POINT_RADIUS;

(2)白色的圆点

        /**
         * 绘制轴  白色的点
         */
     this.paint.setColor(getResources().getColor(R.color.white));
     canvas.drawCircle(ix, iy, INDICATOR_RADIUS / 3, paint);

就是把上面圆的半径/3
(3)指针(三角形)

       /**
         * 绘制针头  三角形
         */
        float angle = (float) (PANEL_PROGRESS / PANEL_MAX * Math.PI);
        float px = (float) (ix - (4 * INDICATOR_RADIUS * Math.cos(angle)));
        float py = (float) (iy - (4 * INDICATOR_RADIUS * Math.sin(angle)));
        Path path = new Path();
        path.moveTo((float) (ix - INDICATOR_RADIUS * Math.sin(angle)),(float) ((iy + INDICATOR_RADIUS * Math.cos(angle))));// 此点为多边形的起点
        path.lineTo((float) (ix + INDICATOR_RADIUS * Math.sin(angle)),(float) ((iy - INDICATOR_RADIUS * Math.cos(angle))));
        path.lineTo(px, py);
        path.close(); // 使这些点构成封闭的多边形
        canvas.drawPath(path, paint);

这里写图片描述
这里用到点数学知识,最后可以得到:
角A=角B
这个结论得到后就可以计算三角形三个点的坐标了

path.moveTo((float) (ix - INDICATOR_RADIUS * Math.sin(angle)),(float) ((iy + INDICATOR_RADIUS * Math.cos(angle))));// 此点为多边形的起点

这个就是三角形的角1

path.lineTo((float) (ix + INDICATOR_RADIUS * Math.sin(angle)),(float) ((iy - INDICATOR_RADIUS * Math.cos(angle))));

这个就是三角形的角2

path.lineTo(px, py);

这个就是三角形的角3
最后利用Path进行绘制

———————————–分割线——————————————
至此为止OnDraw方法分析结束!

onMeasure方法
自定义组件不能没有onMeasure方法,对应的三种模式EXACTLY,AT_MOST,UNSPECIFIED

@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
        int width;
        int height;
        if (widthMode == MeasureSpec.EXACTLY) {
            width = widthSize;
        } else {
            width = (int) (getPaddingLeft() + 2 * PANEL_RADIUS + 1.5f * PANEL_WIDTH + getPaddingRight());
        }

        if (heightMode == MeasureSpec.EXACTLY) {
            height = heightSize;
        } else {
            height = (int) (getPaddingTop() + PANEL_RADIUS + PANEL_WIDTH + getPaddingBottom());
        }


        setMeasuredDimension(width, height);
    }

附加功能
1.动画

/**
     * 启动动画
     */
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    public void startAnimation() {
        ValueAnimator animator = ValueAnimator.ofFloat(0, PANEL_PROGRESS);
        animator.setDuration(3000);

        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                float curValue = (float) animation.getAnimatedValue();
                setProgress(curValue);
            }
        });
        animator.setInterpolator(new OvershootInterpolator());
        animator.start();
    }

这里用的是ValueAnimator,从0~progress,最后利用OvershootInterpolator实现了一个到达顶头后回退一点

2.触摸更改进度

setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                //圆心
                float ix = PANEL_RADIUS + PANEL_WIDTH * 0.75f;
                float iy = PANEL_RADIUS + PANEL_WIDTH * 0.75f - PANEL_POINT_RADIUS;
                float x = event.getX();
                float y = event.getY();

                float yh = iy - y;//角对边
                float progress = 0;
                //sin
                float sin = yh / (PANEL_RADIUS + PANEL_WIDTH); //sin = 角对边 / 半径
                if (x < ix) {//度数<90 Math.asin 反三角函数
                    progress = (float) ((float) Math.asin(sin) * 2 / Math.PI * PANEL_MAX);
                } else { //度数>90
                    progress = (float) (PANEL_MAX - (float) Math.asin(sin) * 2 / Math.PI * PANEL_MAX);
                }

                setProgress(progress);
                return true;
            }
        });

这里写图片描述
这里主要用来反三角函数
如图,假设触摸的位置是红色区域,那么只要算出对应三角形的角度,在映射成进度,设置进度即可。
计算的逻辑还是很好理解的,经历了上面的计算,这个应该很容易理解
实现触摸事件响应->触摸坐标->对应角度->对应进度->setProgress

最后附上GitHub地址https://github.com/sdfdzx/DriverProgress

How to:

Step 1. Add the JitPack repository to your build file
Add it in your root build.gradle at the end of repositories:

    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }

Step 2. Add the dependency

dependencies {
            compile 'com.github.sdfdzx:DriverProgress:v1.0.4'
    }
OpenHarmony实战开发-如何实现波纹进度条 应用开发过程中经常用到波纹进度条,常见的如充电进度、下载进度、上传进度等,本例即为大家介绍如何实现上述场景。 阅读详情

相关推荐

【Ubuntu2404】Ubuntu24.04安装NVIDIA驱动/CUDA/cuDNN搭建神经网络训练环境

NVIDIA 驱动、CUDA和cuDNN是紧密相关但各自具有独特功能的技术,它们共同为图形处理单元(GPU)加速的应用程序提供了强大的支持。本文主要介绍如何安装 `NVIDIA` 驱动、CUDA及cuDNN,为后续神经网络训练提供支持。本文主要介绍Ubuntu24.04安装NVIDIA驱动、CUDA和cuDNN的流程。

王阿巴和王咕噜 1万+

实现一个仪表盘

UI 甩过来了这样的一张图,让我实现,作为一位面向Google百度编程的程序媛,立马打开了搜索引擎,找遍了都没有找到合适的插件。怎么办呢?只能自己来了呀!接下来我们就从这几个点逐步击破,实现效果,哈哈哈哈哈哈哈哈哈哈哈 开始吧!!!

beauty_600的博客 2080

手把手教你用二茂铁催化剂搞定醇的动力学拆分(保姆级实验避坑指南)

本文详细介绍了使用平面手性二茂铁催化剂进行醇的动力学拆分的全流程,包括催化剂选择与制备、反应体系搭建与条件优化、实时监测与反应淬灭、产物分离与纯化等关键步骤。通过实战案例和避坑指南,帮助实验人员实现>98% ee的拆分效果,特别适合需要高光学纯度二级芳基醇或烯丙醇的研究者。

weixin_30500105的博客 435

【css】 CSS3+JS做一个酷炫的仪表进度条&3d进度条

在现代网页设计中,进度环是一种常见的视觉元素,用于展示任务的完成度或加载状态。本文将介绍如何使用Vue.js和Less创建一个动态进度环组件,该组件不仅具有美观的视觉效果,还能够根据用户输入动态改变颜色。已经支持动态配置-----

1867

PADS VX2.4差分对设置避坑指南:常见错误与解决方案

本文深度解析了在PADS VX2.4中进行高速PCB设计时,差分对设置的核心要点与常见陷阱。针对Layout规则设置、Router布线实战中的阻抗控制、线长匹配等关键环节,提供了具体的避坑指南和解决方案,帮助工程师确保信号完整性,提升设计质量。

weixin_29216049的博客 359

Cherry Studio 新手必看:5分钟搞定MCP服务器配置(附常见问题解决)

本文为Cherry Studio新手提供了详细的MCP服务器配置指南。文章从核心概念入手,解释了Cherry Studio作为MCP客户端如何通过MCP协议安全、标准化地扩展AI助手能力。重点讲解了uv和Bun环境的安装与常见网络问题的解决方案,并演示了如何添加首个MCP服务器(如mcp-server-fetch),助你快速构建可扩展的智能工作流。

corn8的博客 595

Web前端之实现酷炫的仪表进度条、JavaScript动态设置Css属性值、标签元素属性选择器、hsl样式函数

Web前端之实现酷炫的仪表进度条、JavaScript动态设置Css属性值、标签元素属性选择器、hsl样式函数

优快云博客主页地址:https://mengjian.blog.youkuaiyun.com/ 1765

Seedance 2.5、HappyHorse 1.1与豆包Seed 2.1:一周内三大模型技术参数分析

音频生成延续原生音画同步架构,将文本、画面、音频统一序列建模,生成过程同步产出匹配口型的原声音频,支持中、英、日、韩、德、法、阿拉伯7种语言唇形对齐,无需二次调音。从行业趋势看,30秒直出、4K分辨率、7语种唇形同步正在成为视频生成的标配,编程Agent化和多模态理解正在成为语言模型的标配。技术狂奔的同时,监管在同步收紧。我理解这里的关键在于,视频生成模型的商业化落地不仅取决于生成质量,更取决于推理效率——生成一段15秒1080P视频需要多少秒、消耗多少算力,直接决定了模型的商用可行性。

lichunchuan1的博客 323

通过HTML/CSS 实现各类进度条的功能。

需求:我们在开发中会遇到使用各式各样的进度条,因为当前插件里面进度条各式各样的,为了方便我们定制化的开发和方便修改样式,我们这里使用。通过本文学习我们会明白如何使用 HTML/CSS 创建各种基础进度条及花式进度条及其动画的方式。

qq_44552416的博客 1万+

YOLOv8改进 | 注意力篇 | 一文带你改进GAM、CBAM、CA、ECA等通道注意力机制和多头注意力机制

官方论文地址:官方论文地址点击此处即可跳转官方代码地址:官方代码地址点击此处即可跳转GAM旨在通过设计一种机制,减少信息损失并放大全局维度互动特征,从而解决传统注意力机制在通道和空间两个维度上保留信息不足的问题。GAM采用了顺序的通道-空间注意力机制,并对子模块进行了重新设计。具体来说,通道注意力子模块使用3D排列来跨三个维度保留信息,并通过一个两层的MLP增强跨维度的通道-空间依赖性。

Snu77的博客 4万+

Dify 第 19 篇 手把手教你开发 Dify 插件:从零实现一个时间工具

本文介绍了Dify平台的插件开发机制和流程。Dify支持多种插件类型,包括模型、工具、数据源等,可通过CLI工具快速开发插件。文章详细讲解了如何安装Dify CLI工具,并演示了从零开发一个获取系统时间插件的完整过程,包括项目初始化、文件解读和打包部署。通过该教程,开发者可以快速掌握Dify插件开发的核心要点,实现自定义功能扩展。

甘蓝的专栏 2448

CSS实现渐变仪表盘的简单尝试

本章节尝试性的使用CSS实现一个简单的渐变仪表盘,给大家提供一些借鉴。实现角向渐变,不得不提一下conic-gradient属性,这个属性是实现角向渐变的关键;其次,数据可视化开发中,以图表的形式展示数据,这就离不开对数据进行处理,将对应的指标数据映射到图表上,也是可视化开发的一项重要工作;另外,图形的展示形式多种多样,高度还原设计师的设计稿,还需要我们对图形有一定的空间想象力。俗话说“条条大道通罗马”,针对设计图形来说,实现方式也有多种多样,只要能达到预期的效果,都是值的学习的

qq_40289557的博客 1731

把核心变干净的代价与回报:为什么推动 Clean Core,几乎绕不开 SAP Integration Suite 与 API Management

Clean Core的核心价值在于构建可持续升级的ERP系统架构,其关键不在于减少代码或限制扩展,而是通过解耦和治理实现系统边界的清晰划分。这一理念将推动企业从传统的"私搭乱建"式集成向平台化工程转型,而SAP Integration Suite和API Management正是实现这一转型的核心组件。 Integration Suite作为集成中枢,通过统一平台、可复用内容库和事件驱动架构,将碎片化连接转变为标准化能力;API Management则负责建立接口治理体系,通过统一入口、

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 243

微信小程序 纯css画仪表盘

canvas和纯css绘制仪表盘

阿坤的博客 2245

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

vue实现 【echarts中 “4种” Gauge仪表盘进度条图例】的组件封装及调用

1、安装echarts npm install echarts --save 2、在需要的页面引入 import * as echarts from "echarts" 3、echarts.vue 组件 <template> <div class="per_page"> <div id="perChart"></div> <img class="per_img" src="@/assets/...

weixin_50450473的博客 8934

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

使用echarts制作仪表盘式进度条

import * as echarts from 'echarts'; var chartDom = document.getElementById('main'); var myChart = echarts.init(chartDom); var option; option = { series: [{ type: 'gauge', boundaryGap: ['0', '100'], radius: [120

weixin_47102346的博客 1485

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

echarts带进度条的仪表盘

带阈值更改颜色 echartUtil.getNetGaugeOption=function(data,value,name){ varname=name;//title名称 vardataArr=data;//进度 varvalue=value; //阈值 ...

qq_41572552的博客 3371

Android自定义view完成仪表盘扇形进度条

先上需求 需要实现一个扇形进度条和两块文字以及进度条下方带渐变色的图层和虚线(中间图层可以自行绘制也可以用切图),使用了kotlin来编写,一些基础用法应该对使用java的不难看懂 开始绘制 1.新建一个kotlin类继承View,并创建自定义view相关构造方法(这里省略),首先定义需要用到且可以自行设置的相关数据 //这是整个扇形的半径 var radius = SizeUtils.dp2px(100f).toFloat() //扇形最后展示的进度 private var p

qq_38496491的博客 1220

vue3+typescript项目中自定义仪表盘仪表盘常用配置项大全

自定义仪表盘样式

weixin_68531033的博客 1789

canvas绘制仪表盘/刻度盘

在vue模板下用canvas实现仪表盘/刻度盘的绘制,含弧度切换、刻度盘、指针等元素

ant_dreams的博客 2355

css系列:进度条

样式部分为笔者需求的样式,需要根据自己项目需要调整。!!有个问题是偶发性绑定事件不触发,暂时还没解决,欢迎大家帮忙解决。

zkx529的博客 1018

纯JS+Vue和canvas实现一个仪表盘

【代码】纯JS+Vue实现一个仪表盘。

菜就多练 4366

Vue3 Element Plus 使用el-progress实现仪表盘形进度条 - 附完整示例

Vue3 Element Plus 使用el-progress实现仪表盘形进度条

m0_48968874的博客 1164

怎样通过 CSS 实现一个圆形进度条,并且能够动态更新进度百分比,无论在什么屏幕上都显示正常,需要考虑哪些技术细节包括动画效果和用户交互逻辑?

嘿,程序员小伙伴们!咱今儿就来聊聊怎么用 CSS 搞出一个圆形进度条,还能让它动态更新进度百分比,而且不管啥屏幕都能完美显示。这玩意儿要是做出来了,那咱网页的交互性和视觉效果可就蹭蹭往上涨啦!要做这个圆形进度条,咱们得先搭个 HTML 架子,把需要的元素都放进去。然后用 CSS 给这些元素好好打扮打扮,让它们变成圆形,再加上进度条的样式和动画效果。最后用 JavaScript 来控制进度条的动态更新,这样就能根据实际情况实时显示进度啦。 在 HTML 里,我们创建了一个 容器,里面放了 作为背景环, 作

前端大白话 986

css 模仿水的感觉

之前做个一个需求,水柱慢慢变满;体现进度条 实现原理其实挺简单的: 两个旋转的 带弧度的环球圆球的东西东西 遮掉 纯色的背景;并且慢慢向上移动 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> ...

唐僧的专栏 655

echarts仪表盘式进度条

效果图如下: let myChart = echarts.init(this.$refs.echarts); let value = (this.data.yh_zg / this.data.yh_total*100).toFixed(2); // 绘制图表 let option = { radius: '480%',//仪表盘放大,默认的图太小了 series: [ // 背景 { .

peppa_pig的博客 3396
上一篇: Volley的引用导致内存泄漏
下一篇: 实现自己的开源库----JitPack使用体验
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值