实现效果如下:

使用方法:

在layout文件中添加以下代码:

  1. <com.example.jack.ui.widget.RingLoading
  2. android:layout_width="20.0dip"
  3. android:layout_height="20.0dip"
  4. />

具体代码如下:

  1. package com.example.jack.ui.widget;
  2.  
  3. import android.content.Context;
  4. import android.graphics.Canvas;
  5. import android.graphics.Color;
  6. import android.graphics.Matrix;
  7. import android.graphics.Paint;
  8. import android.graphics.SweepGradient;
  9. import android.util.AttributeSet;
  10. import android.view.View;
  11.  
  12. /**
  13. * Created by pengf on 2017/4/10.
  14. */
  15.  
  16. public class RingLoading extends View
  17. {
  18. private static final int PROGRESS = 5;
  19. private int centerX;
  20. private int centerY;
  21. private Context context;
  22. private int mProgressColor ;
  23. private Matrix matrix;
  24. private final Paint paint;
  25. private int roundWidth = 10;
  26. private int start = 0;
  27.  
  28. public RingLoading(Context context, AttributeSet attrs)
  29. {
  30. super(context, attrs);
  31. this.context = context;
  32. this.paint = new Paint();
  33. this.paint.setAntiAlias(true);
  34. this.paint.setStyle(Paint.Style.STROKE);
  35. this.paint.setStrokeWidth(this.roundWidth);
  36. this.mProgressColor =Color.parseColor("#ffffcc00");
  37.  
  38. }
  39.  
  40. @Override
  41. protected void onDraw(Canvas canvas)
  42. {
  43. int center = getWidth() / 2;
  44. int radius = center - this.roundWidth / 2;
  45. SweepGradient sweepGradient = new SweepGradient(this.centerX, this.centerY, Color.TRANSPARENT, this.mProgressColor);
  46. this.paint.setShader(sweepGradient);
  47. this.matrix = new Matrix();
  48. this.matrix.postRotate(this.start, this.centerX, this.centerY);
  49. canvas.concat(this.matrix);
  50. canvas.drawCircle(center, center, radius, this.paint);
  51. this.start = (PROGRESS + this.start);
  52. invalidate();
  53. }
  54.  
  55. @Override
  56. protected void onSizeChanged(int w, int h, int oldw, int oldh)
  57. {
  58. super.onSizeChanged(w, h, oldw, oldh);
  59. this.centerX = (w / 2);
  60. this.centerY = (h / 2);
  61. }
  62. }

一个简单的Loading控件的更多相关文章

  1. 【VS开发】 自己编写一个简单的ActiveX控件——详尽教程

    最近开始学ActiveX控件编程,上手不太容易,上网想找相关教程也没合适的,最后还是在师哥的指导下完成了第一个简单控件的开发,现在把开发过程贴出来与大家分享一下~ (环境说明--平台:vs2005:语 ...

  2. 调用ocx ActiveX控件详解(做一个简单的ocx控件)

    背景 最近做的项目都和插件有关,就是在页面中调用插件的方法,然后进行操作. 插件就是ocx ActiveX控件,具体的说明可以自己去了解一下,在这里就不做赘述. 具体调用方式很简单: 1.在页面中写一 ...

  3. 在iOS上实现一个简单的日历控件

    http://blog.csdn.net/jasonblog/article/details/21977481 近期需要写一个交互有点DT的日历控件,具体交互细节这里略过不表. 不过再怎么复杂的控件, ...

  4. 怎样在Android实现桌面清理内存简单Widget小控件

    怎样在Android实现桌面清理内存简单Widget小控件 我们常常会看到类似于360.金山手机卫士一类的软件会带一个widget小控件,显示在桌面上,上面会显示现有内存大小,然后会带一个按键功能来一 ...

  5. WPF实现炫酷Loading控件

    Win8系统的Loading效果还是很不错的,网上也有人用CSS3等技术实现,研究了一下,并打算用WPF自定义一个Loading控件实现类似的效果,并可以让用户对Loading的颗粒(Particle ...

  6. 一个动态扩展表格控件列和行的 jQuery 插件

    一个动态扩展表格控件列和行的 jQuery 插件 不过这并不影响使用鸭! 看这里:https://github.com/zhuwansu/table-ext.js 一个简单的示范 html <t ...

  7. 分享一个漂亮的ProgressBar控件

    codeprject上看到的一个漂亮的ProgressBar控件.是用vb.net开发的. C#直接在工具箱中引用即可. 地址:http://www.codeproject.com/Articles/ ...

  8. Aspose是一个很强大的控件,可以用来操作word,excel,ppt等文件

    Aspose是一个很强大的控件,可以用来操作word,excel,ppt等文件,用这个控件来导入.导出数据非常方便.其中Aspose.Cells就是用来操作Excel的,功能有很多.我所用的是最基本的 ...

  9. android开发中一个activity如何调用另一个xml中的控件

    有时候,我们需要在一个activity中使用另一个activity中的控件,这时候就不能直接findViewById,不然会报错指向空对象,这时就需要像下面这样做. LayoutInflater fa ...

随机推荐

  1. redis集群之主从架构

    https://redis.io/topics/replication1. redis主从架构概述(1)一个master可以配置多个slave(2)slave与master之间使用异步复制进行数据同步 ...

  2. java操作数据库:增删改查

    不多bb了直接上. 工具:myeclipse 2016,mysql 5.7 目的:java操作数据库增删改查商品信息 test数据库的goods表 gid主键,自增 1.实体类Goods:封装数据库数 ...

  3. Postman 安装及使用入门教程 (谷歌浏览器插件版)

    postman 在 谷歌浏览器中插件版 http://www.cnblogs.com/mafly/p/postman.html Postman 4.1.2 下载地址: http://files.cnb ...

  4. ASP.NET Web API 2 使用 AuthorizationFilter(授权过滤器)实现 Basic 认证

    Ø  前言 在 Web 项目中授权认证方式有很多种,本文主要讲述基于 Basic 的认证方式.这是一种比较简单.常见的认证方式,主要是将请求的用户名和密码进行加密后返回给调用方,比较适合采用用户名.密 ...

  5. Python中json一点小知识

    import json dic={ "name":"杨林" } ret=json.dumps(dic,ensure_ascii=False) #因为json.d ...

  6. 快速安装nginx

    1.创建nignx用户 /usr/sbin/groupadd -f nginx /usr/sbin/useradd -g nginx nginx 2.安装依赖 yum install gcc gcc- ...

  7. 【Vue】中 $attrs 中的使用方法

    vue官网是这样介绍的: 包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 style 除外).当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 ( ...

  8. websocket和socketio的总结

    1.WebSocket是什么? WebScoket是一种让客户端和服务器之间能进行双向实时通信的技术.它是HTML最新标准HTML5的一个协议规范,本质上是个基于TCP的协议,它通过HTTP/HTTP ...

  9. linux C遍历目录下文件

    参考链接: http://blog.sina.com.cn/s/blog_626b7339010161tr.html

  10. Django REST framework 第四章 Authentication

    到目前为止,撰写的API没有任何限制关于谁能更新.删除snippet. 我们更想要一些高级行为来确保: 1.代码段总是跟创建者有关联 2.只要认证通过的用户才能创建 3.只有创建者有权限更新或者删除 ...