android自己定义之 5.0 风格progressBar

近期做项目,用到了ProgressBar 。就想到了要使用Android5.0 的效果,就随手实现了一下。

效果图:

大概的思路:

1. 圆圈通过Canvas去绘制

2.圆圈的动画通过Animator去控制

代码:

1.绘制圆的代码是非常easy的。

@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的动画运用,非常easy的方式,能够随手练习一个Animator的使用。没有什么难点。

网盘源代码下载地址: http://pan.baidu.com/s/1dD71XlR

github地址:  https://github.com/flyme2012/EastTrain

博客园地址:http://www.cnblogs.com/flyme2012/p/8ec2c75d44f1896aec817ca441aa5b7c.html

时间: 2024-08-13 16:56:52

android自己定义之 5.0 风格progressBar的相关文章

Android自己定义ViewGroup打造各种风格的SlidingMenu

看鸿洋大大的QQ5.0側滑菜单的视频课程,对于側滑的时的动画效果的实现有了新的认识,似乎打通了任督二脉.眼下能够实现随意效果的側滑菜单了.感谢鸿洋大大!! 鸿洋大大用的是HorizontalScrollView来实现的側滑菜单功能,HorizontalScrollView的优点是为我们攻克了滑动功能.处理了滑动冲突问题.让我们使用起来很方便.可是滑动和冲突处理都是android中的难点,是我们应该掌握的知识点,掌握了这些,我们能够不依赖于系统的API.随心所欲打造我们想要的效果.因此这篇文章我将

android自定义之 5.0 风格progressBar

最近做项目,用到了ProgressBar ,就想到了要使用Android5.0 的效果,就随手实现了一下. 效果图: 大概的思路: 1. 圆圈通过Canvas去绘制 2.圆圈的动画通过Animator去控制 代码: 1.绘制圆的代码是很简单的, @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawArc(arcRectf, startAngle + incrementAngele  ,

android 自己定义水平和圆形progressbar 仅仅定义一些style就能够

效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" > 改动progressbar 让他满足自己的需求一般来说仅仅改动一下,progressbar的style就能够满足需求了: activity代码:只显示一个布局而已 package com.example.testcustomprogre

Android基础入门教程——2.3.7 ProgressBar(进度条)

Android基础入门教程--2.3.7 ProgressBar(进度条) 标签(空格分隔): Android基础入门教程 本节引言: 本节给大家带来的是Android基本UI控件中的ProgressBar(进度条),ProgressBar的应用场景很多,比如 用户登录时,后台在发请求,以及等待服务器返回信息,这个时候会用到进度条:或者当在进行一些比较 耗时的操作,需要等待一段较长的时间,这个时候如果没有提示,用户可能会以为程序Carsh或者手机死机 了,这样会大大降低用户体验,所以在需要进行耗

Android UI--自定义ListView(实现下拉刷新+加载更多)

http://blog.csdn.net/wwj_748/article/details/12512885 Android UI--自定义ListView(实现下拉刷新+加载更多) 关于实现ListView下拉刷新和加载更多的实现,我想网上一搜就一堆.不过我就没发现比较实用的,要不就是实现起来太复杂,要不就是不健全的.因为小巫近期要开发新浪微博客户端,需要实现ListView的下拉刷新,所以就想把这个UI整合到项目当中去,这里只是一个demo,可以根据项目的需要进行修改. 就不要太在乎界面了哈:

Android自己定义控件:进度条的四种实现方式

前三种实现方式代码出自: http://stormzhang.com/openandroid/2013/11/15/android-custom-loading/ (源代码下载)http://download.csdn.net/detail/chaoyu168/9616035 近期一直在学习自己定义控件,搜了很多大牛们Blog里分享的小教程.也上GitHub找了一些类似的控件进行学习.发现读起来都不太好懂,就想写这么一篇东西作为学习笔记吧. 一.控件介绍: 进度条在App中非经常见,比例如以下载

Android开发学习之 定制界面风格

统一的用户界面是可以使得应用程序更友好.要做到用户界面的统一,我们就必须用到风格(style)和主题(theme).OPhone系统提供了很多系统默认的风格和主题,但是很多情况下,这些不能满足我们的需要.例如我们不可能总是希望背景色是系统规定的,我们也不希望字体大小一成不变.当然我们可以在每个空间里面进行修改,但是如果放到风格里面去做,可以更容易的做到用户界面统一.如果有朋友还不清楚什么是风格什么是主题,你可以在Andoird的Dev Guide文档里面找到详细的解释,这篇文章要描述的是开发者怎

Android UI-自定义日历控件

Android UI-自定义日历控件 本篇博客笔者给大家分享一个日历控件,这里有个需求:要求显示当前月的日期,左右可以切换月份来查看日期. 我们想一想会如何去实现这样的一个控件,有开源的,但可能不太满足我们的特定的需求,这里笔者自定义了一个,读者可以根据自己的需求来修改代码.下面来说一下实现的思路: 首先我们要显示当前月份,自然我们要计算出当前的日期,并且把每一天对应到具体的星期,我们会有以下效果: 我们先想一下这样的效果用什么控件可以实现?很自然可以想到用网格视图GridView,但这里笔者使

ANDROID自己定义视图——onLayout源代码 流程 思路具体解释

简单介绍: 在自己定义view的时候.事实上非常easy.仅仅须要知道3步骤: 1.測量--onMeasure():决定View的大小 2.布局--onLayout():决定View在ViewGroup中的位置 3.绘制--onDraw():怎样绘制这个View. 而第3步的onDraw系统已经封装的非常好了,基本不用我们来担心,仅仅须要专注到1,2两个步骤就中好了. 第一步的測量,能够參考我之前的文章:(ANDROID自己定义视图--onMeasure流程.MeasureSpec具体解释) 而