【Android自定义控件】圆圈交替,仿progress效果
还是我们自定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效果相关推荐
- 自定义控件android特效,Android自定义控件eBook实现翻书效果实例详解
本文实例讲述了Android自定义控件eBook实现翻书效果的方法.分享给大家供大家参考,具体如下: 效果图: Book.java文件: package com.book; import androi ...
- 【Android自定义控件】之仿网易星球浮动小球
仿网易星球浮动小球 读呗开发过程中遇到新需求,类似于网易星球收集黑钻的界面,考虑到可能也有人会使用,索性封装成库,后面好移植使用 先看看需要实现的效果: 需求分析: 数据集合可能是int.double ...
- Android自定义控件实战——实现仿IOS下拉刷新上拉加载 PullToRefreshLayout
下拉刷新控件,网上有很多版本,有自定义Layout布局的,也有封装控件的,各种实现方式的都有.但是很少有人告诉你具体如何实现的,今天我们就来一步步实现自己封装的 PullToRefreshLayout ...
- Android 自定义控件之 SwitchButton(仿 iOS 开关)
上图中的按钮是 iOS 中的自带的开关控件,Android 也有很多优秀的仿这个控件的开源库,自己也是模仿着实现了一下,下面记录一下实现过程. 1 思路 首先还是来进行分解动作,从静态样子来看,这个开 ...
- Android 自定义控件实现刮刮卡效果 真的就只是刮刮卡么
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40162163 , 本文出自:[张鸿洋的博客] 很久以前也过一个html5的刮刮卡 ...
- android 图片切换,仿百叶窗效果
2019独角兽企业重金招聘Python工程师标准>>> 不知道百叶窗的效果怎么实现,最后用AsyncTask这个类,相当开辟一个线程,更新UI界面,达到切换图片的效果.并添加小圆点图 ...
- Android自定义控件——模拟抛体加速减速效果
这里主要介绍一个关于类竖直上抛运动规律效果的View,可以用于"加载中"过程动画. 效果 View中元素分析 单个圆点从左边界以一定初速度一定加速度进入,作减速运动,在运动区域中点 ...
- android+广告栏效果,Android自定义控件之广告条滚动效果
在一些电子商务网站上经常能够看到一些滚动的广告条,许多软件在首次使用时也有类似的广告条,如图: 其实在github上有实现这种效果的控件,不过这东西做起来也是很简单,我们今天就来看看该怎么做. 先来看 ...
- android 比分牌效果,Android自定义控件实现球赛比分条效果
本文实例为大家分享了Android实现球赛比分条效果的具体代码,供大家参考,具体内容如下 效果图如下所示: 该控件需要输入两个参数,左边的得分数和右边的的分数 然后根据两边的得分的比例绘制中间的比分条 ...
- Android 自定义控件实现刮刮卡效果
1简易画板的实现 我们的刮刮卡需要掌握绘图,当然了这里不要求你有美术天分,会瞎涂鸦就可以了~~ 下面开始我们的一个简易的画板,其实就是可以在上面画点线条,当然你也可以签个名,我们的View的叫做Gua ...
最新文章
- PAT(甲级)2018年冬季考试 7-1 Google Recruitment
- kint 一个强大的php调试助手
- hashmap containsvalue时间复杂度_面试宝典:数据结构HashMap
- Restful framework【第七篇】权限组件
- 用pv操作描述如下前驱图_跟我学PMP | PV、AC、EV…挣值管理的基本概念都是啥?...
- 使用SAP C4C rule editor动态控制UI上某个按钮是否显示 - SAP Cloud for Customer UI 规则编辑器的使用一例
- [TOOLS] 移动端调试进行时 - whistle
- poi导出word时替换的段落内容会多出一个}和逗号_办公族必备11个Word文字处理技巧,太实用了!...
- Mac下载配置aria2和baidudl
- 【COCOS2DX-LUA 脚本开发之十二】Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)...
- 遗传算法实例(matlab编程实现)
- 阿里云P10技术专家褚霸:我是一个程序员
- Java学习分享---【面向对象基础】抽象
- python 数据shape的理解
- 面试被问“你未来的职业规划是什么”,怎样回答最完美?
- PMBOK(第六版) 学习笔记 ——《第八章 项目质量管理》
- 宿舍管理程序c语言,学生宿舍管理软件C语言源代码完整版
- 12306 抢票 python + selenium + chrome (二) 基础准备的软件和材料
- VC++2010组件安装失败解决办法
- 解决Edge浏览器下载文件乱码
热门文章
- 【线段树】Interval GCD【线段树维护gcd】
- POJ - 3233 —— 矩阵快速幂(分块矩阵与递归)
- 方舟服务器后台一直显示正在重启,win10正在重新启动卡住如何解决_win10重启后一直显示正在重新启动的解决教程...
- iOS NSURLSession 指南
- while循环--登录
- Linux _ Day8 Shell编程之字符截取命令
- linux DHCP安装和测试
- MaterialImageLoading
- ThreadLocal原理、ThreadLocal内存泄漏
- java中一个对象占多少字节