android自定义进度圆与定时任务
先看代码:自定进度圆
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自定义进度圆与定时任务的更多相关文章
- android 自定义进度条颜色
android 自定义进度条颜色 先看图 基于产品经理各种自定义需求,经过查阅了解,下面是自己对Android自定义进度条的学习过程! 这个没法了只能看源码了,还好下载了源码, sources\b ...
- 最简单的android自定义进度条样式
一.自定义圆形进度条样式 1.在安卓项目drawable目录下新建一个xml文件如下:<?xml version="1.0" encoding="utf-8&quo ...
- Android自定义进度条
Android原生控件只有横向进度条一种,而且没法变换样式,比如原生rom的样子很丑是吧,当伟大的产品设计要求更换前背景,甚至纵向,甚至圆弧状的,咋办,比如ok,我们开始吧: 一)变换前背景 先来看看 ...
- Android自定义进度条颜色
这个没法了只能看源码了,还好下载了源码, sources\base\core\res\res\ 下应有尽有,修改进度条颜色只能找progress ,因为是改变样式,首先找styles.xml ? 1 ...
- Android自定义进度条-带文本(文字进度)的水平进度条(ProgressBar)
水平进度条,显示进度的文本随着进度而移动. 效果如下,截的静态图. 代码如下 TextProgressBar.java public class TextProgressBar extends Pro ...
- Android 自定义 View 圆形进度条总结
Android 自定义圆形进度条总结 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 微信公众号:牙锅子 源码:CircleProgress 文中如有纰漏,欢迎大家留言指出. 最近 ...
- Android 自定义波浪动画 --"让进度浪起来~"
原文链接:http://www.jianshu.com/p/0e25a10cb9f5 一款效果不错的动画,实现也挺简单的,推荐阅读学习~ -- 由 傻小孩b 分享 waveview <Andro ...
- Android学习系列(3)--App自动更新之自定义进度视图和内部存储
友好的视觉感知和稳定的不出错表现,来自于我们追求美感和考虑的全面性,博客园从技术的角度,一直我都很欣赏.这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用. 这 ...
- 我的Android进阶之旅------>Android自定义View实现带数字的进度条(NumberProgressBar)
今天在Github上面看到一个来自于 daimajia所写的关于Android自定义View实现带数字的进度条(NumberProgressBar)的精彩案例,在这里分享给大家一起来学习学习!同时感谢 ...
随机推荐
- 12-8 php基础
<?php //单行注释/* 多行注释*/ //弱类型语言//var a = 10;/*$a=10;$b = "hello";var_dump($a);$a="wo ...
- Why one-norm is an agreeable alternative for zero-norm?
[转载请注明出处]http://www.cnblogs.com/mashiqi Today I try to give a brief inspection on why we always choo ...
- 使用 IMQ+HTB+iptable 统一流量控制心得
IMQ 是中介队列设备的简称,是一个虚拟的网卡设备,与物理网卡不同的是,通过它可以进行全局的流量整形,不需要一个网卡一个网卡地限速.这对有多个ISP接入的情况特别方便.配合 Iptables,可以非常 ...
- Node.js高级编程读书笔记Outline
Motivation 世俗一把,看看前端的JavaScript究竟能做什么. 顺便检验一下自己的学习能力. Audience 想看偏后台的Java程序员关于前端JavaScript的认识的职业前端工程 ...
- 数据结构C语言实现系列——线性表(线性表链接存储(单链表))
#include <stdio.h>#include <stdlib.h>#define NN 12#define MM 20typedef int elemType ;/** ...
- cvMat结构体详解
/* *CvMat矩阵头 */ typedef struct CvMat { int type; //数据类型,比如CV_32FC1含义是32位浮点型单通道,再比如CV_8UC3含义是8位无符号整型三 ...
- mysql-创建库之问题
一.在登入mysql命令行,创建数据库时报错 ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'xiaolu ...
- iPhone SlideShow
If you found any question when you use the Slideshow, don't hesitate to leave a message please.
- linux后台进程管理工具supervisor
Linux的后台进程运行有好几种方法,例如nohup,screen等,但是,如果是一个服务程序,要可靠地在后台运行,我们就需要把它做成daemon,最好还能监控进程状态,在意外结束时能自动重启. su ...
- Spark ML 文本的分类
最近一直在研究Spark的分类算法,因为我们是做日志文本分类,在官网和各大网站一直没找到相应的Demo,经过1个多月的研究,终于有点成效. val sparkConf = new SparkConf( ...