效果图:

布局的代码,指定引用自定义View类:

<!-- 绘制圆环 -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myswitch="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="400px"
android:orientation="horizontal"> <custom.view.upgrade.draw_ring.DrawRing
android:layout_width="387px"
android:layout_height="387px"
/> <RelativeLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_marginLeft="40dp"
android:paddingTop="30dp"
android:paddingBottom="30dp"> <View
android:layout_width="16dip"
android:layout_height="16dip"
android:background="@drawable/super_financing"/> <View
android:layout_width="16dip"
android:layout_height="16dip"
android:background="@drawable/true_financing"
android:layout_centerVertical="true"/> <View
android:layout_width="16dip"
android:layout_height="16dip"
android:background="@drawable/diandian_voal"
android:layout_alignParentBottom="true"
/> </RelativeLayout> </LinearLayout>

三个小圆点的代码:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" > <solid android:color="@color/ring_test2" /> <corners android:radius="5dip" /> </shape> <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" > <solid android:color="@color/ring_test3" /> <corners android:radius="5dip" /> </shape> <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" > <solid android:color="@color/ring_test1" /> <corners android:radius="5dip" /> </shape>

颜色值代码:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color> <color name="ring_test1">#BED887</color>
<color name="ring_test2">#F53D4D</color>
<color name="ring_test3">#ECBBB9</color>
</resources>

注意:我这一版,百分比值与绘制环的百分之多少,是写死的,后续我会更新成动态的绘制的

自定义圆环代码:

package custom.view.upgrade.draw_ring;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.os.Build;
import android.os.SystemClock;
import android.support.annotation.RequiresApi;
import android.util.AttributeSet;
import android.view.View; import custom.view.R; public class DrawRing extends View { // 定义画笔
private Paint mPaint1; private Paint mPaint2; private Paint mPaint3; private Paint mPaintText; @RequiresApi(api = Build.VERSION_CODES.M)
public DrawRing(Context context, AttributeSet attrs) {
super(context, attrs); mPaint1 = new Paint();
mPaint1.setAntiAlias(true);
mPaint1.setColor(context.getColor(R.color.ring_test1));
// mPaint1.setColor(Color.GREEN);
// 设置样式为,空心的,这样那园环就出来了
mPaint1.setStyle(Paint.Style.STROKE);
// 设置那个圆环的粗细
mPaint1.setStrokeWidth(40); mPaint2 = new Paint();
mPaint2.setAntiAlias(true);
mPaint2.setColor(context.getColor(R.color.ring_test2));
// mPaint2.setColor(Color.RED);
// 设置样式为,空心的,这样那园环就出来了
mPaint2.setStyle(Paint.Style.STROKE);
// 设置那个圆环的粗细
mPaint2.setStrokeWidth(40); mPaint3 = new Paint();
mPaint3.setAntiAlias(true);
mPaint3.setColor(context.getColor(R.color.ring_test3));
// mPaint3.setColor(Color.BLUE);
// 设置样式为,空心的,这样那园环就出来了
mPaint3.setStyle(Paint.Style.STROKE);
// 设置那个圆环的粗细
mPaint3.setStrokeWidth(40); mPaintText = new Paint();
mPaintText.setAntiAlias(true);
mPaintText.setColor(Color.BLACK);
mPaintText.setTextSize(24);
} private int w;
private int h; private final int MOVE_VALUE = 88; @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec); w = MeasureSpec.getSize(widthMeasureSpec);
h = MeasureSpec.getSize(heightMeasureSpec);
setMeasuredDimension(w, h);
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas); // 定义一个区域
// 左边,上边,都给0
// 右边与下边都给200
RectF rectF = new RectF(20, 20, 356, 356); /*canvas.drawArc(rectF, 0, 241.2f, false, mPaint1);
canvas.drawArc(rectF, 241.2f, 10, false, mPaint2);*/ // useCenter:false 代表不花圆心 // canvas.drawArc(rectF, 此值是开始点, 此值并不是从开始点到此值点 它会记录之前的值自动进行累加,false, mPaint1); // 360 * 0.67 = 241.2
canvas.drawArc(rectF, 0 - MOVE_VALUE, 241.2f, false, mPaint1); // 360 * 0.23
canvas.drawArc(rectF, 241.2f - MOVE_VALUE, 82.0f, false, mPaint2); // 360 * 0.10
canvas.drawArc(rectF, 241.2f + 82.0f - MOVE_VALUE, 36, false, mPaint3); canvas.drawText("67%", canvas.getWidth() - 70, (canvas.getHeight() / 2) + 80, mPaintText); canvas.drawText("23%", 5, (canvas.getHeight() / 2) - 26, mPaintText); canvas.drawText("10%", 116, 34, mPaintText); // draw();
} // 可以实现缓慢加载绘制的效果,但没有实际意义,就全部去除了 /*private int countI; private void draw() {
countI++;
if (countI < 120) {
SystemClock.sleep(18);
invalidate();
}
}*/ }

Android-自定义圆环的更多相关文章

  1. Android自定义View之ProgressBar出场记

    关于自定义View,我们前面已经有三篇文章在介绍了,如果筒子们还没阅读,建议先看一下,分别是android自定义View之钟表诞生记.android自定义View之仿通讯录侧边栏滑动,实现A-Z字母检 ...

  2. Android 自定义View修炼-自定义View-带百分比进度的圆形进度条(采用自定义属性)

    很多的时候,系统自带的View满足不了我们功能的需求,那么我们就需要自己来自定义一个能满足我们需求的View,自定义View我们需要先继承View,添加类的构造方法,重写父类View的一些方法,例如o ...

  3. Android 自定义 View 圆形进度条总结

    Android 自定义圆形进度条总结 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 微信公众号:牙锅子 源码:CircleProgress 文中如有纰漏,欢迎大家留言指出. 最近 ...

  4. android 自定义动画

    android自定义动画注意是继承Animation,重写里面的initialize和applyTransformation,在initialize方法做一些初始化的工作,在applyTransfor ...

  5. Android自定义View 画弧形,文字,并增加动画效果

    一个简单的Android自定义View的demo,画弧形,文字,开启一个多线程更新ui界面,在子线程更新ui是不允许的,但是View提供了方法,让我们来了解下吧. 1.封装一个抽象的View类   B ...

  6. Android自定义View4——统计图View

    1.介绍 周末在逛慕课网的时候,看到了一张学习计划报告图,详细记录了自己一周的学习情况,天天都是0节课啊!正好在学习Android自定义View,于是就想着自己去写了一个,这里先给出一张慕课网的图,和 ...

  7. (转)[原] Android 自定义View 密码框 例子

    遵从准则 暴露您view中所有影响可见外观的属性或者行为. 通过XML添加和设置样式 通过元素的属性来控制其外观和行为,支持和重要事件交流的事件监听器 详细步骤见:Android 自定义View步骤 ...

  8. Android 自定义View合集

    自定义控件学习 https://github.com/GcsSloop/AndroidNote/tree/master/CustomView 小良自定义控件合集 https://github.com/ ...

  9. Android 自定义View (五)——实践

    前言: 前面已经介绍了<Android 自定义 view(四)-- onMeasure 方法理解>,那么这次我们就来小实践下吧 任务: 公司现有两个任务需要我完成 (1)监测液化天然气液压 ...

  10. Android 自定义 view(四)—— onMeasure 方法理解

    前言: 前面我们已经学过<Android 自定义 view(三)-- onDraw 方法理解>,那么接下我们还需要继续去理解自定义view里面的onMeasure 方法 推荐文章: htt ...

随机推荐

  1. "废物利用"也抄袭——“完全”DIY"绘图仪"<三、上位机程序设计>

    上位机的程序主要是解析图片和生成较好的代码,现在实现的功能有灰度打印,二值打印,轮廓打印,骨骼打印.当然,必不可少的是打印大小的控制.测试了一些图片,总体来说,打印速度依次加快,因为打印的内容依次减少 ...

  2. ORM sqlachemy

    本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 1. ORM介绍 orm英文全称object relational mapping ...

  3. 将Hive统计分析结果导入到MySQL数据库表中(一)——Sqoop导入方式

    https://blog.csdn.net/niityzu/article/details/45190787 交通流的数据分析,需求是对于海量的城市交通数据,需要使用MapReduce清洗后导入到HB ...

  4. sublime text3最新版本注册码(build 3143)

    —– BEGIN LICENSE —– TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA ...

  5. 决策树与树集成模型(bootstrap, 决策树(信息熵,信息增益, 信息增益率, 基尼系数),回归树, Bagging, 随机森林, Boosting, Adaboost, GBDT, XGboost)

    1.bootstrap   在原始数据的范围内作有放回的再抽样M个, 样本容量仍为n,原始数据中每个观察单位每次被抽到的概率相等, 为1/n , 所得样本称为Bootstrap样本.于是可得到参数θ的 ...

  6. 横向文本框 index获取索引 和 eq 实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 4 MySQL--表(增删改查)

    1.表的介绍 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段 id,name,qq,age称为字段,其余的,一行内容称为一条记录 2.创建表: ...

  8. 【常见CPU架构对比】维基百科

    Comparison of instruction set architectures https://en.wikipedia.org/wiki/Comparison_of_instruction_ ...

  9. python 迭代器/生成器/迭代对象

    生成器: 带有yield的函数 迭代器:带有next 方法的对象,可以作为内建函数next的参数 迭代对象:带有__iter__方法的对象,__iter__方法返回迭代器 -------------- ...

  10. A*—java代码

    import java.util.ArrayList; // A*算法寻路 public class AStar2 { public static final int[][] maps = { {0, ...