首先今天我们要使用三个圆形动画

1,圆形加载进度条 。2,三个圆形并列的加载动画。3,两个圆形替换变大的加载动画

首先我们来理一下思路:

圆形加速进度条的话我们首先要画一个圆形(我画的是一个灰色的圆形),然后我们再画一个红色的圆形盖在灰色的圆形上面,

最后我们再画一个比较小的白色圆形放在红色的圆形中间,这样红色的圆形看起来就觉得中间是空的,就只剩一个红色的圆弧在外面了,

你们可以看效果图11.jpg

现在我们来看看代码:

1.先自定义一个试图RingView extends View

2.在构造函数中获得屏幕的宽和高,到时候我们用宽和高的一半来设置我们要画的圆的圆形

public RingView(Context context, AttributeSet attrs) {super(context, attrs);//获取屏幕的宽,高  WindowManager wm=(WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE);width = wm.getDefaultDisplay().getWidth();heigh = wm.getDefaultDisplay().getHeight();}

3,重新View的onDraw()方法,开始画圆

@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);//1.画一个灰色的圆形int circleWid=width/2;int circleHgt=heigh/2;Paint paint=new Paint(Paint.ANTI_ALIAS_FLAG);paint.setColor(Color.rgb(220,220,220));canvas.drawCircle(circleWid, circleHgt, 100, paint);//2.画一个红色的圆放在灰色的圆上面paint.setColor(Color.RED);RectF f=new RectF(circleWid-100,circleHgt-100,circleWid+100,circleHgt+100);canvas.drawArc(f, -90,process, true, paint);//3.在画一个圆来并且放在红色圆的中间,设置为白色。这样看起来红色就是一个进度条了paint.setColor(Color.WHITE);canvas.drawCircle(circleWid, circleHgt, 80, paint);paint.setColor(Color.RED);paint.setTextSize(28);//计算出数字的长度int textWid=(int) paint.measureText(String.valueOf(process));canvas.drawText(String.valueOf(process), circleWid-textWid/2, circleHgt, paint);}
</pre>4,接下来我们要来设置根据进度来加载我们的圆了<p></p><p>在MainActivity中我们获取到我们的自定义视图,然后new Thread(new CircleThread()).start();</p><p></p><pre name="code" class="java">private class CircleThread implements Runnable {@Overridepublic void run() {while (begin) {SystemClock.sleep(1000);/*** 在新的线程中,发送消息给View,更新界面数据 通过m++实现加速度方式的不断加速绘制弧形* i代表要绘制扇形的角度大小,默认下290度*/m++;Message msg = new Message();if (process < 290) {process += m;} else {process = 290;begin = false;}msg.what = 1;msg.obj = process;System.out.println("process1:" + process);mhHandler.sendMessage(msg);}}}

最后我们在handler中

private Handler mhHandler = new Handler(new Callback() {@Overridepublic boolean handleMessage(Message msg) {switch (msg.what) {case 1:int value = (int) msg.obj;ring.setProcess(value);ring.invalidate();break;default:break;}return true;}});

再在我们的自定义视图中根据获取到的值,来加载我们的圆了,详细请见 圆形加载动画源码

好,接下来我们来将圆形的加载动画了,也就是22.jpg,和33.jpg的效果

ps:为什么我图片传上来了。却看不到呢?

方法其实和扇面的方法是很像的:在ondraw方法中

protected void onDraw(Canvas canvas) {Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);// paint.setColor(Color.rgb(220,220, 220));//// canvas.drawCircle(midWid, midHei, 10, paint);// paint.setColor(Color.parseColor("#50DAF1"));// canvas.drawCircle(midWid, midHei, 20, paint);if (Uiutil.circleColor == Color.BLUE) {paint.setColor(Color.BLUE);} else {paint.setColor(Color.rgb(220, 220, 220));// canvas.drawCircle(midWid, midHei, 10, paint);}paint.setAntiAlias(true);paint.setStyle(Style.FILL);canvas.drawCircle(4, 4, 4.0f, paint); // 注意圆心的位置super.onDraw(canvas);}

在外面我们设置一个全局的变量,要来判断是否变色

public class Uiutil {public static int circleColor=Color.BLUE;
}

我们来看看主页的xml文件的布局

<LinearLayoutandroid:layout_width="match_parent"android:layout_height="50dp"android:gravity="center"android:orientation="horizontal" ><com.example.circlescale2.CircleScaleViewandroid:id="@+id/cirScale1"android:layout_width="8dip"android:layout_height="15dip"android:layout_gravity="center"android:layout_marginTop="6dip"android:layout_marginRight="10dp"android:gravity="center"android:padding="4dip" /><com.example.circlescale2.CircleScaleViewandroid:id="@+id/cirScale2"android:layout_width="8dip"android:layout_height="15dip"android:layout_gravity="center"android:layout_marginTop="6dip"android:layout_marginRight="10dp"android:gravity="center"android:padding="4dip" /><com.example.circlescale2.CircleScaleViewandroid:id="@+id/cirScale3"android:layout_width="8dip"android:layout_height="15dip"android:layout_gravity="center"android:layout_marginTop="6dip"android:gravity="center"android:padding="4dip" /></LinearLayout>

再看看MainActivity中的代码实现:

private class CircleColor implements Runnable{@Overridepublic void run() {while(true){count++;if(count%3==0){SystemClock.sleep(100);Uiutil.circleColor=Color.BLUE;circleScaleView1.postInvalidate();SystemClock.sleep(100);Uiutil.circleColor=Color.GRAY;circleScaleView2.postInvalidate();SystemClock.sleep(100);Uiutil.circleColor=Color.GRAY;circleScaleView3.postInvalidate();}else if(count%3==1){SystemClock.sleep(100);Uiutil.circleColor=Color.GRAY;circleScaleView1.postInvalidate();SystemClock.sleep(100);Uiutil.circleColor=Color.BLUE;circleScaleView2.postInvalidate();SystemClock.sleep(100);Uiutil.circleColor=Color.GRAY;circleScaleView3.postInvalidate();}else{SystemClock.sleep(100);Uiutil.circleColor=Color.GRAY;circleScaleView1.postInvalidate();SystemClock.sleep(100);Uiutil.circleColor=Color.GRAY;circleScaleView2.postInvalidate();SystemClock.sleep(100);Uiutil.circleColor=Color.BLUE;circleScaleView3.postInvalidate();}} }}

详细请看源码: 圆形动画2

http://download.csdn.net/detail/iblue007/9120817

接下来我们来看看左后一个圆形动画:也叫  仿Uc加载动画

实际上和上面的功能类似。换个思路就可以想到了。主要代码是:

@Overrideprotected void onDraw(Canvas canvas) {int midWid = width / 2;int midHei = heigh / 2;Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);paint.setAntiAlias(true);paint.setStyle(Style.FILL);if (Uiutil.circleColor == Color.BLUE) {Uiutil.circleColor = Color.rgb(220, 220, 220);paint.setColor(Color.BLUE);canvas.drawCircle(midWid-10, midHei, 6, paint);paint.setColor(Color.rgb(220, 220, 220));canvas.drawCircle(midWid+10, midHei, 5, paint);} else {Uiutil.circleColor = Color.BLUE;paint.setColor(Color.rgb(220, 220, 220));canvas.drawCircle(midWid-10, midHei, 5, paint);paint.setColor(Color.BLUE);canvas.drawCircle(midWid+10, midHei, 6, paint); }super.onDraw(canvas);}

大家有兴趣的话可以去下源码看看,很简单的, 仿Uc加载动画

好。就到这里。希望对你有帮助

自定义视图-圆形动画的使用相关推荐

  1. android view 渐变动画,Android自定义view渐变圆形动画

    本文实例为大家分享了Android自定义view渐变圆形动画的具体代码,供大家参考,具体内容如下 直接上效果图 自定义属性 attrs.xml文件 创建一个类 ProgressRing继承自 view ...

  2. android刷新时的圆形动画_Android自定义view渐变圆形动画

    本文实例为大家分享了Android自定义view渐变圆形动画的具体代码,供大家参考,具体内容如下 直接上效果图 自定义属性 attrs.xml文件 创建一个类 ProgressRing继承自 view ...

  3. Android官方开发文档Training系列课程中文版:动画视图之创建自定义转场动画

    原文地址:http://android.xsoftlab.net/training/transitions/custom-transitions.html 自定义转场可以创建自定义动画.比如,可以定义 ...

  4. 自定义视图,重绘多张图片形成动画

    注意事项: 1.如需将自定义视图添加到XML,必须实现 public Game(Context context, AttributeSet attrs)构造方法 2.图片缩放 Matrix matri ...

  5. iOS 自定义转场动画浅谈

    代码地址如下: http://www.demodashi.com/demo/11612.html 路漫漫其修远兮,吾将上下而求索 前记 想研究自定义转场动画很久了,时间就像海绵,挤一挤还是有的,花了差 ...

  6. android 自定义绘画,【整理】Android 自定义视图之画图

    Android 自定义视图之画图 首先简单的一个画矩形的例子 public class DrawView extends View { public DrawView(Context context) ...

  7. iOS 自定义转场动画实现小红书的push效果思路以及下雪碎屏等动画的实现

    感觉好久没写会动的Demo了,前几天写了很久的Block源码分析,分析了几天整个人都不好了,都不知道block是什么了......,有需要的同学可以去看看,简直不要太简单Block是什么鬼毕竟也是做电 ...

  8. Android中自定义视图View

    标签: 前言 好长时间没写blog了,心里感觉有点空荡荡的,今天有时间就来写一个关于自定义视图的的blog吧.关于这篇blog,网上已经有很多案例了,其实没什么难度的.但是我们在开发的过程中有时候会用 ...

  9. Android中自定义视图View之---前奏篇

    前言 好长时间没写blog了,心里感觉有点空荡荡的,今天有时间就来写一个关于自定义视图的的blog吧.关于这篇blog,网上已经有很多案例了,其实没什么难度的.但是我们在开发的过程中有时候会用到一些自 ...

最新文章

  1. 平面上的点和直线上的点一样多
  2. Java实现内嵌浏览器
  3. hdu 4358(莫队算法+dfs序列)
  4. Angular jasmine fixture.detectChanges如何触发directive的set方法
  5. 大端字节序与小端字节序的转换
  6. OEA 中 WPF 树型表格虚拟化设计方案
  7. 运筹作业题:一个正三角形平面,在三个角的部分减去一部分,然后沿着剪开部分折叠起来,使折叠后的三棱台体积最大
  8. CIKM'21「eBay」推荐系统--利用超图对商品的多模态信息建模
  9. python的shelve库
  10. 数据库基础(2):简单查询和连接查询
  11. 《王道计算机考研》:应用层
  12. php smarty 模板注释,smarty中的注释
  13. pb 使用mysql_pb连接mySql数据库
  14. 赤兔CMS(CTCMS)V2.0.6版更新了后台模板样式
  15. Violations Associated with Nets
  16. C语言字母大小写互换的简单方法
  17. ghost网络克隆功能实现【批量】计算机操作【系统的安装】,Ghost怎么网络克隆备份还原系统GhostCast教程...
  18. MM01 物料主数据批导
  19. mysql创建零件供应商表_● 建立一个供应商、零件数据库。其中“供应商”表 S(Sno,Sname,Zip,City)分别表示: 供应商代码、 供应 - 赏学吧...
  20. MVP -----个人理解与示例(android例子 实现)

热门文章

  1. vivox23幻彩版手机怎么设置双击息屏
  2. 网口芯片W5500使用笔记以及注意点
  3. mysql创建视图字符集1267_MYSQL字符集错误:ERROR1267(HY000):Illegalmixof...解决_MySQL
  4. 微服务-官网module
  5. C语言 getline函数实现
  6. 双目视觉测距系统软硬件设计
  7. 一个男孩从软件测试工程师到主管的成长感悟!!!
  8. java 主机字节序 网络字节序_主机字节序 与 网络字节序
  9. 我想带你去浪漫的土耳其(PythonMatlab实现)
  10. forEach()遍历set()方法