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)的精彩案例,在这里分享给大家一起来学习学习!同时感谢 ...
随机推荐
- As 和 Is的区别
首先来说说As是干什么的: 代码: void OnMouseEnter(object sender, MouseEventArgs e){ Ellipse ell = sender as Ellips ...
- SVG文档的注意事项
SVG 是 HTML5 关于描述矢量图的元素.可以写在 <html> </html> 中,也可以保存为一个单独的.svg文件. 单独作为一个svg文件的时候,有一点规则需要注意 ...
- sass&compass&grunt
1. compass compile path/to/project//编译scss compass watch path/to/project//自动监视文件变化 2.mixin @include ...
- Spring加载resource时classpath*:与classpath:的区别
http://blog.csdn.net/kkdelta/article/details/5507799 classpath: 第一个匹配的 classpath*:多个组件中的可匹配的
- 通过Oracle补充日志,找到锁阻塞源头的SQL
问题背景: 有时会考虑一件事情,如果在Oracle环境下出现了锁阻塞的情况,如何定位到SQL源头(通过session.lock.transaction等视图仅能定位到会话)?或许有人会想有没有可能通过 ...
- 【巩固】CSS3的animation基础
终于结束了最后css3的一节课,关于animation的使用,其实之前已经用过一次.大致要了解的就是,关于如何让动画停在最后一帧的方法.视频里有提到过css3出了个新的样式可以实现,但是老师没有记住, ...
- Windows下单机安装Spark开发环境
机器:windows 10 64位. 因Spark支持java.python等语言,所以尝试安装了两种语言环境下的spark开发环境. 1.Java下Spark开发环境搭建 1.1.jdk安装 安装o ...
- C# 文件大小
/// <summary> /// 获取文件大小 /// </summary> /// <param name="sFullName">< ...
- oracle11g rac asm存储数据迁移
OS:rh6.4 ORACLE 11g RAC ASM OCR和VOTING DISK在crs磁盘组,控制文件.数据文件.参数文件在DATA组. 1.备份数据库 RUN {ALLOCATE CHANN ...
- [DFNews] EIFT更新至1.2,支持iPhone4s及iPhone5物理获取
俄罗斯厂商Elcomsoft近日更新了其旗下的iOS取证软件Elcomesoft iOS Forensic Toolkit,更新后的1.2版本支持针对iOS 4-6的iPhone 4s.iPhone5 ...