还是我们自定View的那几个步骤:

1、自定义View的属性

2、在View的构造方法中获得我们自定义的属性

3、重写onMesure (不是必须)

4、重写onDraw

自定义View的属性

 <?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="firstColor" format="color" /><attr name="secondColor" format="color" /><attr name="circleWidth" format="dimension" /><attr name="speed" format="integer" /><declare-styleable name="progressStyle"><attr name="firstColor"/><attr name="secondColor"/><attr name="circleWidth"/><attr name="speed"/></declare-styleable>
</resources>

自定义View,并且使用自定义的View

public class ProgressView extends View {/*** 第一圈的颜色*/private int mFirstColor;/*** 第二圈的颜色*/private int mSecondColor;/*** 圈的宽度*/private int mCircleWidth;/*** 画笔*/private Paint mPaint;/*** 当前进度*/private int mProgress;/*** 速度*/private int mSpeed;/*** 是否应该开始下一个*/private boolean isNext = false;public ProgressView(Context context) {this(context, null);}public ProgressView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public ProgressView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.progressStyle,defStyleAttr,0);int n = typedArray.getIndexCount();for (int i =0 ;i < n ; i ++){int attr =typedArray.getIndex(i);switch (attr){//这里的0,1,2,3对应attrs中declare-styleable name="progressStyle"数组元素的顺序,我是为了举例方便,实际开发中不要这样写case 0:mFirstColor = typedArray.getColor(attr, Color.BLACK);break;case 1:mSecondColor = typedArray.getColor(attr, Color.RED);break;case 2:mCircleWidth = typedArray.getDimensionPixelSize(attr,(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,16,getResources().getDisplayMetrics()));break;case 3:mSpeed = typedArray.getInt(attr,20);break;}}typedArray.recycle();mPaint = new Paint();startMyThread();}@Overrideprotected void onDraw(Canvas canvas) {int center = getWidth() / 2; // 获取圆心的x坐标int radius = (center - mCircleWidth)/2 ;// 半径mPaint.setAntiAlias(true);mPaint.setStrokeWidth(mCircleWidth);mPaint.setStyle(Paint.Style.STROKE);RectF rectf = new RectF(center-radius,center-radius,center+radius,center+radius);
//颜色的切换if(!isNext){canvas.save();mPaint.setColor(mFirstColor);// 设置圆环的颜色canvas.drawCircle(center,center,radius,mPaint);//划出圆圈mPaint.setColor(mSecondColor);canvas.drawArc(rectf,-90,mProgress,false,mPaint);//根据进度画圆弧canvas.restore();}else {canvas.save();mPaint.setColor(mSecondColor);// 设置圆环的颜色canvas.drawCircle(center,center,radius,mPaint);mPaint.setColor(mFirstColor);canvas.drawArc(rectf,-90,mProgress,false,mPaint);canvas.restore();}}private void startMyThread() {new Thread(new Runnable() {@Overridepublic void run() {while (true){mProgress++;//进度if(mProgress == 360){//当360度时候值变为初始状态mProgress = 0;if(!isNext){//设置是否切换颜色开关isNext = true;}else {isNext = false;}}postInvalidate();try {Thread.sleep(mSpeed);}catch (InterruptedException e){e.printStackTrace();}}}}).start();;}
<strong>
</strong>


   以上代码就是自定义View的全部代码,使用的话没什么多说的 直接在Xml中引用这个新建的ProgressView就可以了


重画ondraw   不多解释直接看代码

 @Overrideprotected void onDraw(Canvas canvas) {int center = getWidth() / 2; // 获取圆心的x坐标int radius = (center - mCircleWidth)/2 ;// 半径mPaint.setAntiAlias(true);mPaint.setStrokeWidth(mCircleWidth);mPaint.setStyle(Paint.Style.STROKE);RectF rectf = new RectF(center-radius,center-radius,center+radius,center+radius);if(!isNext){canvas.save();mPaint.setColor(mFirstColor);// 设置圆环的颜色canvas.drawCircle(center,center,radius,mPaint);//划出圆圈mPaint.setColor(mSecondColor);canvas.drawArc(rectf,-90,mProgress,false,mPaint);//根据进度画圆弧canvas.restore();}else {canvas.save();mPaint.setColor(mSecondColor);// 设置圆环的颜色canvas.drawCircle(center,center,radius,mPaint);mPaint.setColor(mFirstColor);canvas.drawArc(rectf,-90,mProgress,false,mPaint);canvas.restore();}}

效果是不是和progress相似呢 ,自己试试看吧

因为有的人说效果很生硬,我就做了个完整的gif图,速度是可以调节的,根据不同的速度值,移动可以调剂频率

【Android自定义控件】圆圈交替,仿progress效果相关推荐

  1. 自定义控件android特效,Android自定义控件eBook实现翻书效果实例详解

    本文实例讲述了Android自定义控件eBook实现翻书效果的方法.分享给大家供大家参考,具体如下: 效果图: Book.java文件: package com.book; import androi ...

  2. 【Android自定义控件】之仿网易星球浮动小球

    仿网易星球浮动小球 读呗开发过程中遇到新需求,类似于网易星球收集黑钻的界面,考虑到可能也有人会使用,索性封装成库,后面好移植使用 先看看需要实现的效果: 需求分析: 数据集合可能是int.double ...

  3. Android自定义控件实战——实现仿IOS下拉刷新上拉加载 PullToRefreshLayout

    下拉刷新控件,网上有很多版本,有自定义Layout布局的,也有封装控件的,各种实现方式的都有.但是很少有人告诉你具体如何实现的,今天我们就来一步步实现自己封装的 PullToRefreshLayout ...

  4. Android 自定义控件之 SwitchButton(仿 iOS 开关)

    上图中的按钮是 iOS 中的自带的开关控件,Android 也有很多优秀的仿这个控件的开源库,自己也是模仿着实现了一下,下面记录一下实现过程. 1 思路 首先还是来进行分解动作,从静态样子来看,这个开 ...

  5. Android 自定义控件实现刮刮卡效果 真的就只是刮刮卡么

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40162163 , 本文出自:[张鸿洋的博客] 很久以前也过一个html5的刮刮卡 ...

  6. android 图片切换,仿百叶窗效果

    2019独角兽企业重金招聘Python工程师标准>>> 不知道百叶窗的效果怎么实现,最后用AsyncTask这个类,相当开辟一个线程,更新UI界面,达到切换图片的效果.并添加小圆点图 ...

  7. Android自定义控件——模拟抛体加速减速效果

    这里主要介绍一个关于类竖直上抛运动规律效果的View,可以用于"加载中"过程动画. 效果 View中元素分析 单个圆点从左边界以一定初速度一定加速度进入,作减速运动,在运动区域中点 ...

  8. android+广告栏效果,Android自定义控件之广告条滚动效果

    在一些电子商务网站上经常能够看到一些滚动的广告条,许多软件在首次使用时也有类似的广告条,如图: 其实在github上有实现这种效果的控件,不过这东西做起来也是很简单,我们今天就来看看该怎么做. 先来看 ...

  9. android 比分牌效果,Android自定义控件实现球赛比分条效果

    本文实例为大家分享了Android实现球赛比分条效果的具体代码,供大家参考,具体内容如下 效果图如下所示: 该控件需要输入两个参数,左边的得分数和右边的的分数 然后根据两边的得分的比例绘制中间的比分条 ...

  10. Android 自定义控件实现刮刮卡效果

    1简易画板的实现 我们的刮刮卡需要掌握绘图,当然了这里不要求你有美术天分,会瞎涂鸦就可以了~~ 下面开始我们的一个简易的画板,其实就是可以在上面画点线条,当然你也可以签个名,我们的View的叫做Gua ...

最新文章

  1. PAT(甲级)2018年冬季考试 7-1 Google Recruitment
  2. kint 一个强大的php调试助手
  3. hashmap containsvalue时间复杂度_面试宝典:数据结构HashMap
  4. Restful framework【第七篇】权限组件
  5. 用pv操作描述如下前驱图_跟我学PMP | PV、AC、EV…挣值管理的基本概念都是啥?...
  6. 使用SAP C4C rule editor动态控制UI上某个按钮是否显示 - SAP Cloud for Customer UI 规则编辑器的使用一例
  7. [TOOLS] 移动端调试进行时 - whistle
  8. poi导出word时替换的段落内容会多出一个}和逗号_办公族必备11个Word文字处理技巧,太实用了!...
  9. Mac下载配置aria2和baidudl
  10. 【COCOS2DX-LUA 脚本开发之十二】Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)...
  11. 遗传算法实例(matlab编程实现)
  12. 阿里云P10技术专家褚霸:我是一个程序员
  13. Java学习分享---【面向对象基础】抽象
  14. python 数据shape的理解
  15. 面试被问“你未来的职业规划是什么”,怎样回答最完美?
  16. PMBOK(第六版) 学习笔记 ——《第八章 项目质量管理》
  17. 宿舍管理程序c语言,学生宿舍管理软件C语言源代码完整版
  18. 12306 抢票 python + selenium + chrome (二) 基础准备的软件和材料
  19. VC++2010组件安装失败解决办法
  20. 解决Edge浏览器下载文件乱码

热门文章

  1. 【线段树】Interval GCD【线段树维护gcd】
  2. POJ - 3233 —— 矩阵快速幂(分块矩阵与递归)
  3. 方舟服务器后台一直显示正在重启,win10正在重新启动卡住如何解决_win10重启后一直显示正在重新启动的解决教程...
  4. iOS NSURLSession 指南
  5. while循环--登录
  6. Linux _ Day8 Shell编程之字符截取命令
  7. linux DHCP安装和测试
  8. MaterialImageLoading
  9. ThreadLocal原理、ThreadLocal内存泄漏
  10. java中一个对象占多少字节