先看代码:自定进度圆

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. As 和 Is的区别

    首先来说说As是干什么的: 代码: void OnMouseEnter(object sender, MouseEventArgs e){ Ellipse ell = sender as Ellips ...

  2. SVG文档的注意事项

    SVG 是 HTML5 关于描述矢量图的元素.可以写在 <html> </html> 中,也可以保存为一个单独的.svg文件. 单独作为一个svg文件的时候,有一点规则需要注意 ...

  3. sass&compass&grunt

    1. compass compile path/to/project//编译scss compass watch path/to/project//自动监视文件变化 2.mixin @include ...

  4. Spring加载resource时classpath*:与classpath:的区别

    http://blog.csdn.net/kkdelta/article/details/5507799   classpath: 第一个匹配的 classpath*:多个组件中的可匹配的

  5. 通过Oracle补充日志,找到锁阻塞源头的SQL

    问题背景: 有时会考虑一件事情,如果在Oracle环境下出现了锁阻塞的情况,如何定位到SQL源头(通过session.lock.transaction等视图仅能定位到会话)?或许有人会想有没有可能通过 ...

  6. 【巩固】CSS3的animation基础

    终于结束了最后css3的一节课,关于animation的使用,其实之前已经用过一次.大致要了解的就是,关于如何让动画停在最后一帧的方法.视频里有提到过css3出了个新的样式可以实现,但是老师没有记住, ...

  7. Windows下单机安装Spark开发环境

    机器:windows 10 64位. 因Spark支持java.python等语言,所以尝试安装了两种语言环境下的spark开发环境. 1.Java下Spark开发环境搭建 1.1.jdk安装 安装o ...

  8. C# 文件大小

    /// <summary> /// 获取文件大小 /// </summary> /// <param name="sFullName">< ...

  9. oracle11g rac asm存储数据迁移

    OS:rh6.4 ORACLE 11g RAC ASM OCR和VOTING DISK在crs磁盘组,控制文件.数据文件.参数文件在DATA组. 1.备份数据库 RUN {ALLOCATE CHANN ...

  10. [DFNews] EIFT更新至1.2,支持iPhone4s及iPhone5物理获取

    俄罗斯厂商Elcomsoft近日更新了其旗下的iOS取证软件Elcomesoft iOS Forensic Toolkit,更新后的1.2版本支持针对iOS 4-6的iPhone 4s.iPhone5 ...