先看代码:自定进度圆

public class ProgressCircle extends View {

    private Paint paint;
private int strokewidth = 4;
private int alpha = 50;
private int progress = 30;
private Paint mpaint; public ProgressCircle(Context context) {
super(context,null);
} public ProgressCircle(Context context, AttributeSet attrs) {
super(context, attrs); paint = new Paint();
paint.setColor(Color.BLACK);
paint.setDither(true);
paint.setAntiAlias(true);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeWidth(strokewidth);
paint.setStyle(Paint.Style.STROKE);
paint.setAlpha(alpha); mpaint = new Paint();
mpaint.setColor(Color.RED);
mpaint.setDither(true);
mpaint.setAntiAlias(true);
mpaint.setStrokeCap(Paint.Cap.ROUND);
mpaint.setStrokeJoin(Paint.Join.ROUND);
mpaint.setStrokeWidth(strokewidth);
mpaint.setStyle(Paint.Style.STROKE); } @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas); int cx = getWidth()/2;
int cy = getHeight()/2;
int radius = (cx>cy?cy:cx)-strokewidth; canvas.drawCircle(cx,cy,radius,paint); RectF oval = new RectF(cx-radius,cy-radius,cx+radius,cy+radius);
canvas.drawArc(oval,90,(int)(-(3.6)*progress),false,mpaint);
} public void setprogress( int progresss){
this.progress = progresss; postInvalidate();//这个很重要,不能是Invalidate(); }
} 如果是invalidate();则会报错:

android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6024)
at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:853)
at android.view.ViewGroup.invalidateChild(ViewGroup.java:4320)

因为:invalidate是在UI线程中使用,而postInvalidate是在非UI线程中使用的,UI线程中不能做耗时任务;

看MainActivity代码:

public class MainActivity extends AppCompatActivity {

    private ProgressCircle circle;
private Button load;
private int i = 0; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); circle = (ProgressCircle) findViewById(R.id.circle);
load = (Button) findViewById(R.id.load);
load.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Thread(myrunable).start();
}
});
} Runnable myrunable = new Runnable() {
@Override
public void run() {
// setdata(); Timedata();
}
}; private void setdata(){
for (int j = 0; j < 101; j++) {
circle.setprogress(j);
Log.e("tag", "run: "+j );
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} private void Timedata(){
Timer timer = new Timer();
final TimerTask task = new TimerTask() {
@Override
public void run() {
circle.setprogress(i);
Log.e("tag", "run: "+i);
if (i>99){
cancel();
}
i++;
}
};
timer.schedule(task,10,100); } @Override
protected void onDestroy() {
super.onDestroy(); }
}

schedu的参数:timetask是指定时任务,第二个参数是指在在什么事件段内完成,我这里写的是10;第三个peroid是指在延时多少时间执行任务。

demo下载地址:https://github.com/renjiemei1225/ProgressCircle_12_7.git

android自定义进度圆与定时任务的更多相关文章

  1. android 自定义进度条颜色

    android 自定义进度条颜色 先看图 基于产品经理各种自定义需求,经过查阅了解,下面是自己对Android自定义进度条的学习过程!   这个没法了只能看源码了,还好下载了源码, sources\b ...

  2. 最简单的android自定义进度条样式

    一.自定义圆形进度条样式 1.在安卓项目drawable目录下新建一个xml文件如下:<?xml version="1.0" encoding="utf-8&quo ...

  3. Android自定义进度条

    Android原生控件只有横向进度条一种,而且没法变换样式,比如原生rom的样子很丑是吧,当伟大的产品设计要求更换前背景,甚至纵向,甚至圆弧状的,咋办,比如ok,我们开始吧: 一)变换前背景 先来看看 ...

  4. Android自定义进度条颜色

    这个没法了只能看源码了,还好下载了源码, sources\base\core\res\res\ 下应有尽有,修改进度条颜色只能找progress ,因为是改变样式,首先找styles.xml ? 1 ...

  5. Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar)

    水平进度条,显示进度的文本随着进度而移动. 效果如下,截的静态图. 代码如下 TextProgressBar.java public class TextProgressBar extends Pro ...

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

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

  7. Android 自定义波浪动画 --"让进度浪起来~"

    原文链接:http://www.jianshu.com/p/0e25a10cb9f5 一款效果不错的动画,实现也挺简单的,推荐阅读学习~ -- 由 傻小孩b 分享 waveview <Andro ...

  8. Android学习系列(3)--App自动更新之自定义进度视图和内部存储

    友好的视觉感知和稳定的不出错表现,来自于我们追求美感和考虑的全面性,博客园从技术的角度,一直我都很欣赏.这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用. 这 ...

  9. 我的Android进阶之旅------>Android自定义View实现带数字的进度条(NumberProgressBar)

    今天在Github上面看到一个来自于 daimajia所写的关于Android自定义View实现带数字的进度条(NumberProgressBar)的精彩案例,在这里分享给大家一起来学习学习!同时感谢 ...

随机推荐

  1. vim使用过程

    首先推荐几篇文章先: 用Vim编程——配置与技巧 有时候需要设置映射键,此时可以在.vimrc中配置一些项就可以轻松映射了. 以下是几个映射模式: map : 正常模式,可视化模式和运算符模式可用 n ...

  2. jQuery UI Autocomplete是jQuery UI的自动完成组件(share)

    官网:http://jqueryui.com/autocomplete/ 以下分享自:http://www.cnblogs.com/yuzhongwusan/archive/2012/06/04/25 ...

  3. 如何使用NPOI 导出到excel和导入excel到数据库

    近期一直在做如何将数据库的数据导出到excel和导入excel到数据库. 首先进入官网进行下载NPOI插件(http://npoi.codeplex.com/). 我用的NPOI1.2.5稳定版. 使 ...

  4. 一:解决VirtualBox只能安装32位系统的问题

    发现自己的笔记本(Thinkpad E440)里的 VirtualBox 只能安装 32位 的系统,如下图所示: 经过一番查资料,发现这玩意需要到BIOS里设置一下,方可安装 64位 系统,操作如下: ...

  5. ASP.NET MVC : Action过滤器(Filtering)

    http://www.cnblogs.com/QLeelulu/archive/2008/03/21/1117092.html ASP.NET MVC : Action过滤器(Filtering) 相 ...

  6. IDEA 中 显示 *.properties 为中文

      效果:  

  7. IOS开发-CALayer和UIView详细汇总

    1.    CALayer和UIView之间的关系: 在iOS系统中,你能看得见摸得着的东西基本上都是UIView,比如UI控件.图标等等,都是UIView. 其实UIView之所以能显示在屏幕上,完 ...

  8. JavaScript引用方法说明

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

  9. <<有效软件测试>> 读书笔记和自己的一些思考

    需求阶段 1. 测试人员及早介入,需要彻底了解产品,设计测试过程 * 及早介入,可以了解在开发的过程中需要使用哪些新技术,新的平台, 测试组是否方便进行测试,是否方便进行自动化测试,早期开发和测试应该 ...

  10. php利用zookeeper作dispatcher服务器

    ===== https://blog.eood.cn/php_share_memory 最常见的apc 可以缓存php的opcode提高应用的性能,可以在同个php-fpm进程池间共享数据 常见功能: ...