上一篇学习了基本使用方法,今天学一下略微复杂一点的。先看一下效果图

为了完毕上面的效果还是要用到上一期开头的四步

1,属性应该要有颜色,要有速度

<?xml version="1.0" encoding="utf-8"?>
<resources> <attr name="speed" format="integer" />
<attr name="circleColor" format="color" /> <declare-styleable name="ViewCircle">
<attr name="speed" />
<attr name="circleColor" />
</declare-styleable> </resources>

假设对这里有什么不了解能够看我上一篇Android 自己定义View学习(1)

2, 在构造方法中获得这些属性

	TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.ViewCircle, defStyle, 0);
int n = a.getIndexCount();
for (int i = 0; i < n; i++) {
int attr = a.getIndex(i);
switch (attr) {
case R.styleable.ViewCircle_speed:
mSpeed = a.getInteger(attr, 300);
break;
case R.styleable.ViewCircle_circleColor:
mColor = a.getColor(attr, Color.GREEN);
break;
}
}
a.recycle();

3,这次我们不重写onMeasure

4,重写onDraw

protected void onDraw(Canvas canvas) {
// 居中
canvas.translate(getWidth() / 2, getHeight() / 2);
// 画出三个圆
canvas.drawCircle(0, 0, 200, mCircle);
canvas.drawCircle(0, 0, 180, mCentreCircle);
canvas.drawCircle(0, 0, 160, mNexCircle);
//进度
RectF rectF = new RectF(-180, -180, 180, 180);
canvas.drawArc(rectF, -90, mProgress, true, mTimer);
//算出字体所占大小,使其居中
mLinePaint.getTextBounds(String.valueOf(mProgress), 0,
String.valueOf(mProgress).length(), rect);
canvas.drawText(String.valueOf(mProgress), -rect.width() / 2, 0,
mLinePaint);
//总进度为六十
int count = 60;
//刻度从190--200
int y = 190;
Rect rect = new Rect();
mLinePaint.getTextBounds("00", 0, "00".length(), rect);
//当i%10==0时画一道刻度线
for (int i = 0; i < count; i++) {
if (i % 10 == 0) {
canvas.drawLine(0, y, 0, 200, mLinePaint);
canvas.drawText(String.valueOf(i / 10) + "0",
-rect.width() / 2, 220, mLinePaint);
}
canvas.rotate(360 / count, 0, 0);
}
}

我们注意一下canvas.drawArc(rectF, -90, mProgress, true, mTimer);

我们传进去的为true效果就是

假设我们传进去false

能够明显的看到区别,没事也能够试试我们这个demo传进去false会是什么效果。

接下来为了让这个进度动起来我们就要用到线程来刷新ui

new Thread() {
public void run() {
while (true) {
mProgress++;
if (mProgress == 360) {
mProgress = 0;
} postInvalidate();
try {
Thread.sleep(mSpeed);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
}.start();

这样基本就差点儿相同了。

接下来看看终于效果

项目源代码

Android 自己定义View学习(2)的更多相关文章

  1. Android 自己定义View (二) 进阶

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24300125 继续自己定义View之旅.前面已经介绍过一个自己定义View的基础 ...

  2. Android之自定义View学习(一)

    Android之自定义View学习(一) Canvas常用方法: 图片来源 /** * Created by SiberiaDante on 2017/6/3. */ public class Bas ...

  3. Android 自己定义View须要重写ondraw()等方法

    Android  自己定义View须要重写ondraw()等方法.这篇博客给大家说说自己定义View的写法,须要我们继承View,然后重写一些 方法,方法多多,看你须要什么方法 首先写一个自己定义的V ...

  4. 【Android自己定义View实战】之自己定义超简单SearchView搜索框

    [Android自己定义View实战]之自己定义超简单SearchView搜索框 这篇文章是对之前文章的翻新,至于为什么我要又一次改动这篇文章?原因例如以下 1.有人举报我抄袭,原文链接:http:/ ...

  5. Android自己定义view之measure、layout、draw三大流程

    自己定义view之measure.layout.draw三大流程 一个view要显示出来.须要经过測量.布局和绘制这三个过程,本章就这三个流程具体探讨一下.View的三大流程具体分析起来比較复杂,本文 ...

  6. 手把手带你画一个 时尚仪表盘 Android 自己定义View

    拿到美工效果图.咱们程序猿就得画得一模一样. 为了不被老板喷,仅仅能多练啊. 听说你认为前面几篇都so easy,那今天就带你做个相对照较复杂的. 转载请注明出处:http://blog.csdn.n ...

  7. 自己定义View学习之12/7(进度条之混合模式)

    今天重点内容是我们学习自己定义view里面的混合模式.事实上我们的画布就跟photoshop一样.是个图层关系,一层盖着一层.这样就导致有非常多种覆盖模式,这就是我们今天的主题."混合模式& ...

  8. Android自己定义View的实现方法

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17357967 不知不觉中,带你一步步深入了解View系列的文章已经写到第四篇了.回 ...

  9. Android自己定义View基础篇(三)之SwitchButton开关

    自己定义View基础篇(二) 自己定义View基础篇(一) 自己定义View原理 我在解说之前,先来看看效果图,有图有真相:(转换gif图片效果太差) 那来看看真实图片: 假设你要更改样式,请改动例如 ...

随机推荐

  1. luogu1890 gcd区间

    题目大意:给定一行n个正整数a[1]..a[n].m次询问,每次询问给定一个区间[L,R],输出a[L]..a[R]的最大公因数. 因为gcd满足交换律和结合律,所以用线段树维护区间上的gcd值即可. ...

  2. putty配色方案【转】

    本文转载自:http://blog.csdn.net/hfut_jf/article/details/53636080 putty默认的配色方案简直毫无人道主义可言,所以找了个,好多了,转载自http ...

  3. Amazon宣布将MXNet作为AWS的深度学习框架——貌似性能比tf高啊

    Amazon公司的Werner Vogels于上周宣布Amazon深度学习框架将会正式选用MXNet,并且AWS将会通过增加源代码贡献.改进文档以及支持来自其它框架的可视化.开发以及迁移工具,为实现M ...

  4. A - Kefa and First Steps

    Problem description Kefa decided to make some money doing business on the Internet for exactly n day ...

  5. NFine平台去掉平台介绍页面出现的一系列问题

    1.去掉平台介绍页面要做的操作:数值Index页面的下面两处内容 2.注释掉以上两处内容后出现的问题:•当打开多个页面后,最先打开的第一个页面(如下图1的位置)点击×号不能关闭页面:•当打开多个页面后 ...

  6. 小程序-wx:for

    wx:for (列表渲染) index默认数组下标item默认数组当前项的变量名 数组是对象的形式,单纯写{{item}},结果是[object object]的形式,必须加对象名,并且对象名基本设置 ...

  7. 用命令行在本地创建一个库并上传到Github

    1  如何在本地创建一个仓库并上传到github? 基本步骤: $ mkdir blog //在桌面上创建一个叫"blog"的目录 $ cd blog //"cd blo ...

  8. Linux od与hexdump命令

    od命令:以指定格式输出文件内容常用格式:od -Ax -tx1 filename直接格式:od filename 等价 od -o filename语法:od [-abcdfsiloxv] [-An ...

  9. WordPress浏览次数统计插件:WP-Postviews使用

    WP-Postviews使用 1.要让你的博客在页面上显示浏览次数,你需要修改你博客当前使用的主题,在主循环中插入以下代码: 1 <?php if(function_exists('the_vi ...

  10. j2ee学习笔记

    Servlet: ①字符集问题:②身份验证:③统一的输入输出:类似母版,重写ServletResponeceWraper的getWriter,使用缓存流. 然后输出时,分析stringWriter , ...