android自定义之 5.0 风格progressBar
来源:互联网 发布:unity3d按轨迹运动 编辑:程序博客网 时间:2024/06/10 17:33
最近做项目,用到了ProgressBar ,就想到了要使用Android5.0 的效果,就随手实现了一下。
效果图:
大概的思路:
1. 圆圈通过Canvas去绘制
2.圆圈的动画通过Animator去控制
代码:
1.绘制圆的代码是很简单的,
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawArc(arcRectf, startAngle + incrementAngele , sweepAngle, false, arcPaint) ;
if (animatorSet == null || !animatorSet.isRunning()) {
startAnimation() ;
}
}
通过canvas.draw Arc 去绘制 startAngle则是绘制开始的角度 通过加上 incrementAngle这一个变量是为了更好去做动画控制。
2.动画控制代码: (这个才是最重要的代码)
private void startAnimation(){
if (animatorSet != null && animatorSet.isRunning()) {
animatorSet.cancel() ; // 取消动画
}
animatorSet = new AnimatorSet() ; //设置一个动画集合
AnimatorSet set = circuAnimator(); // 创建运行一圈动画的AnimatorSet
animatorSet.play(set) ;
animatorSet.addListener(new AnimatorListener() {
private boolean isCancel = false ;
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
if (!isCancel) {
startAnimation() ; // 不停的去循环动画
}
}
@Override
public void onAnimationCancel(Animator animation) {
isCancel = true ;
}
}) ;
animatorSet.start() ;
}
//默认的动画时间
private int DEFULT_DURATION = 660 ;
/**
* 循环的动画
*/
private AnimatorSet circuAnimator(){
//从小圈到大圈
ValueAnimator holdAnimator1 = ValueAnimator.ofFloat(incrementAngele + DEFULT_MIN_ANGLE , incrementAngele + 115f) ;
holdAnimator1.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
incrementAngele = (float) animation.getAnimatedValue() ;
}
}) ;
holdAnimator1.setDuration(DEFULT_DURATION ) ;
holdAnimator1.setInterpolator(new LinearInterpolator()) ;
ValueAnimator expandAnimator = ValueAnimator.ofFloat(DEFULT_MIN_ANGLE , DEFULT_MAX_ANGLE) ;
expandAnimator.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
sweepAngle = (float) animation.getAnimatedValue() ;
incrementAngele -= sweepAngle ;
invalidate() ;
}
}) ;
expandAnimator.setDuration(DEFULT_DURATION) ;
expandAnimator.setInterpolator(new DecelerateInterpolator(2)) ;
//从大圈到小圈
ValueAnimator holdAnimator = ValueAnimator.ofFloat(startAngle , startAngle + 115f) ;
holdAnimator.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
startAngle = (float) animation.getAnimatedValue() ;
}
});
holdAnimator.setDuration(DEFULT_DURATION ) ;
holdAnimator.setInterpolator(new LinearInterpolator()) ;
ValueAnimator narrowAnimator = ValueAnimator.ofFloat(DEFULT_MAX_ANGLE , DEFULT_MIN_ANGLE) ;
narrowAnimator.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
sweepAngle = (float) animation.getAnimatedValue() ;
invalidate() ;
}
}) ;
narrowAnimator.setDuration(DEFULT_DURATION) ;
narrowAnimator.setInterpolator(new DecelerateInterpolator(2)) ;
AnimatorSet set = new AnimatorSet() ;
set.play(holdAnimator1 ).with(expandAnimator) ;
set.play(holdAnimator).with(narrowAnimator).after(holdAnimator1);
return set ;
}
OK。这个实现思路主要就是Animator的动画运用,很简单的方式,可以随手练习一个Animator的使用。没有什么难点。
github地址: https://github.com/flyme2012/EastTrain
0 0
- android自定义之 5.0 风格progressBar
- android自定义之 5.0 风格progressBar
- Android之自定义ProgressBar
- Android 自定义谷歌风格ProgressBar
- Android之ProgressBar详解---自定义ProgressBar
- Android移植之自定义ProgressBar
- Android 自定义View(三)Material Design风格的ProgressBar
- android笔记之自定义圆形ProgressBar
- Android自定义view之下载控件,ProgressBar
- Android学习之自定义进度条ProgressBar
- Android自定义View之ProgressBar出场记
- Android自定义view之ProgressBar的实现
- Android自定义View之ProgressBar出场记
- 【ProgressBar】Android 自定义ProgressBar集锦
- 106_自定义ProgressBar的显示风格
- 自定义控件之-----progressBar
- 自定义控件之-----progressBar
- 自定义控件之-----progressBar
- Asteroids (最小覆盖)
- spring mvc aop 拦截 附近上传
- 等比例图片缩放
- Java finally语句到底是在return之前还是之后执行?
- centos7 配置多个Tomcat
- android自定义之 5.0 风格progressBar
- .net之gridview表中数据操作
- python中多继承的问题(比较C++的多继承)
- 各种线性筛法
- 字符串入门
- [前端] centos下搭建nodejs
- “多线程”简介及其C代码实现框架
- PhoneGap的学习第二讲-PhoneGap生命周期中的事件
- 【技巧】一些开发时能够提高开发效率的技巧