< com.atsgg.customviewdemo09. WaveView
    android :layout_width= "match_parent"
    android :layout_height= "match_parent"/>
public class WaveView  extends View {

private Paint  mPaint; //  画笔对象
    private Path  mPath; //  路径对象

    private int  vWidthvHeight; //  控件宽高
    private float  ctrXctrY; //  控制点的坐标
    private float  waveY; //  整个 Wave 顶部两端点的 Y 坐标,该坐标与控制点的 Y 坐标增减幅一致 , 以及
    private float  startXendX; //  整个 Wave 的左端点 , 与右端点

    private boolean  isInc//  判断控制点是该坐移还是右移 ,true 为右移

    public WaveView(Context context) {
        this(context,  null);
    }

public WaveView(Context context, AttributeSet attrs) {
        this(context, attrs,  0);
    }

public WaveView(Context context, AttributeSet attrs,  int defStyleAttr) {
        super(context, attrs, defStyleAttr);

//  实例化画笔并设置参数
        mPaint new Paint(Paint. ANTI_ALIAS_FLAG | Paint. DITHER_FLAG);
        mPaint.setColor( 0xFF00796B);

//  实例化路径
        mPath new Path();
    }

@Override
    protected void onSizeChanged( int w,  int h,  int oldw,  int oldh) {
        //  获取控件的宽高
        vWidth = w;
        vHeight = h;

//  计算端点 Y 坐标
        waveY =  1 /  8F *  vHeight;
        //  计算控制点 Y 的坐标
        ctrY = - 1 /  16F *  vHeight;

startX = - 1 /  4F *  vWidth;
        endX =  1 /  4F *  vWidth vWidth;
    }

@Override
    protected void onDraw(Canvas canvas) {
        /**
         *  设置 Path 起点
          注意我将 Path 的起点设置在了控件的外部看不到的区域
          如果我们将起点设置在控件左端 x=0 的位置会使得贝塞尔曲线变得生硬
          至于为什么刚才我已经说了
          所以我们稍微让起点往 走点
          */
        mPath.moveTo( startXwaveY);

/**
         *  以二阶曲线的方式通过控制点连接位于控件右边的终点
          终点的位置也是在控件外部
          我们只需不断让 ctrX 的大小变化即可实现 的效果
          */
        mPath.quadTo( ctrXctrYendXwaveY);
//        mPath.cubicTo(ctrX, ctrY,
//                (vWidth + 1 / 4F * vWidth) / 2, waveY - 1 / 8F * vHeight,
//                vWidth + 1 / 4F * vWidth, waveY);

        //  围绕控件闭合曲线
        mPath.lineTo( endXvHeight);
        mPath.lineTo( startXvHeight);
        mPath.close();

canvas.drawPath( mPathmPaint);

/**
         *  当控制点的 x 坐标大于或等于终点 x 坐标时更改标识值
          */
        if ( ctrX >=  endX) {
            isInc false;
        }
        /**
         *  当控制点的 x 坐标小于或等于起点 x 坐标时更改标识值
          */
        else if ( ctrX <=  startX) {
            isInc true;
        }
        //  根据标识值判断当前的控制点 x 坐标是该加还是减
        ctrX isInc ctrX +  20 :  ctrX -  20;

if ( ctrY <=  vHeight) {
            ctrY +=  2;
            waveY +=  2;
        }
        mPath.reset();
        invalidate();
    }
}

WIN10圆形进度条相关推荐

  1. android 自定义音乐圆形进度条,Android自定义View实现音频播放圆形进度条

    本篇文章介绍自定义View配合属性动画来实现如下的效果 实现思路如下: 根据播放按钮的图片大小计算出圆形进度条的大小 根据音频的时间长度计算出圆形进度条绘制的弧度 通过Handler刷新界面来更新圆形 ...

  2. Android自定义控件NumberCircleProgressBar(圆形进度条)的实现

    Android自定义控件NumberCircleProgressBar(圆形进度条)的实现

  3. html进度条圆圈渐变色,HTML5 canvas带渐变色的圆形进度条动画

    jquery-circle-progress是一款带渐变色的圆形进度条动画特效jQuery插件.该圆形进度条使用的是HTML5 canvas来绘制圆形进度条及其动画效果,进度条使用渐变色来填充,效果非 ...

  4. 微信小程序之圆形进度条(自定义组件)

    前言 昨天在微信小程序实现了圆形进度条,今天想把这个圆形进度条做成一个组件,方便以后直接拿来用. 根据官方文档自定义组件一步一步来 创建自定义组件 第一步创建项目结构 打开微信开发者工具创建一个项目, ...

  5. Android 之 ProgressDialog用法介绍(矩形进度条 和 圆形 进度条)

    2019独角兽企业重金招聘Python工程师标准>>> 布局文件: <LinearLayout xmlns:android="http://schemas.andro ...

  6. 【Android 应用开发】 自定义 圆形进度条 组件

    转载著名出处 : http://blog.csdn.net/shulianghan/article/details/40351487 代码下载 : -- CSDN 下载地址 : http://down ...

  7. android 环形时间显示_Android圆形进度条颜色的设置

    最近几天由于项目的需要研究了一下listView的滑动数据动态的更新显示,其中需要在数据加载过程有圆形进度条的显示,遇到的问题是进度条的颜色设置,在网上查了一些资料结合自己的所得分享在此. xml布局 ...

  8. Android自定义圆形进度条

    Android自定义圆形进度条 github地址:https://github.com/opq1289/CircleProgressView 效果图: 无动画: 有动画: 整圆: 切割圆: 具体步骤: ...

  9. Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)

    转载请注明地址:http://blog.csdn.net/xiaanming/article/details/10298163 很多的时候,系统自带的View满足不了我们功能的需求,那么我们就需要自己 ...

最新文章

  1. python paramiko模块中设置执行命令超时值
  2. python 矩阵基础
  3. 使用nginx动静分离后,druid被拦截的解决方法
  4. Spring5参考指南:基于注解的容器配置
  5. 如何使用阿里云ARMS诊断Java服务端报错问题
  6. spring mvc 前后端数据交互笔记(解决415,400问题)
  7. 四、python沉淀之路--元组
  8. Windows server 2003 DNS子域与委派管理配置指南
  9. 土方工程量计算表格excel_土方量调配表(Excel公式版)
  10. 阿里这样的高并发系统是如何做限流的?
  11. Maven常用命令 - 构建反应堆中指定模块
  12. 周围像素点的最大均方差替代该点
  13. 红米note2能刷机没显示无服务器,红米Note2刷机失败怎么办
  14. matplotlib之2010-2017年各季度国民生产总值散点图
  15. android如何加密所有的布局文件夹,android:是否可以加密文件夹
  16. 百度EasyDL实体抽取和关系抽取
  17. 汽车高级驾驶辅助系统ADAS功能盘点
  18. matlab零状态响应幅度频谱,matlab零状态、零输入响应
  19. java JPI中常使用的类介绍即java.lang包下的东西
  20. 沈航计算机学院杨华,【沈航新青年·实践】电子信息工程学院“电信筑梦,科技振兴”暑期社会实践活动纪实...

热门文章

  1. 一个ip 不同端口如何对应不同域名
  2. 美团面试:熟悉哪些JVM调优参数,幸好我准备过!
  3. Java Collections.frequency()方法具有什么功能呢?
  4. html5游戏《命令与征服》
  5. 【嵌入式Linux开发一路清障-连载01】Ubuntu22.04启动U盘制作及系统安装与配置
  6. matlab 最小频移键控,最小频移键控(MSK)技术的研究与特性分析
  7. jieba + wordcloud + word2vec实例
  8. 《单元测试的艺术》学习笔记
  9. 第2章第15节:使用分栏减少视觉疲劳 [PowerPoint精美幻灯片实战教程]
  10. php larval框架运行环境,4种Windows系统下Laravel框架的开发环境安装及部署方法详解...