今天,闲来无事,看到金山词霸的加载时的LoadingView甚是不错,于是就小模仿了一下。先看效果:
下面切入正题,先说下思路:
1.确定中心点的坐标
2.根据正余弦函数,确定8个小圆的圆心坐标
3.定义有8个颜色的数组,画圆的时候依次用不用颜色的画笔

注意:画圆之前要把之前画的圆的颜色置为灰色
下面自定义View的代码:
CircleLoading.java

public class CircleLoading extends View{private Paint mPaint;   //画笔private Context mContext;   private float mRadius;  //小圆半径private int radius; //大圆半径private float centerX;private float centerY;private int currentPosition = 6;    //动画起始位置(即动画从最靠上的那个圆开始)private boolean isStart = false;//定义8种颜色private int colors[] = {Color.YELLOW,Color.GREEN,Color.CYAN,Color.BLUE,Color.parseColor("#9809F7"),Color.parseColor("#03F0F7"),Color.RED,Color.parseColor("#F85004")};public CircleLoading(Context context) {this(context,null);}public CircleLoading(Context context, AttributeSet attrs) {this(context, attrs,0);}public CircleLoading(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context);}private void init(Context context) {mContext = context;mPaint = new Paint();mPaint.setAntiAlias(true);mPaint.setStyle(Style.FILL);mPaint.setColor(Color.GRAY);radius = dip2px(30);mRadius = dip2px(5);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec);//处理 wrap_content问题int defaultDimension = dip2px(100);if (widthSpecMode == MeasureSpec.AT_MOST && heightSpecMode == MeasureSpec.AT_MOST) {setMeasuredDimension(defaultDimension, defaultDimension);} else if (widthSpecMode == MeasureSpec.AT_MOST) {setMeasuredDimension(defaultDimension, heightSpecSize);} else if (heightSpecMode == MeasureSpec.AT_MOST) {setMeasuredDimension(widthSpecSize, defaultDimension);}}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);centerX = w/2;centerY = h/2;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);mPaint.setColor(Color.GRAY);for(int i = 0;i<8;i++){float circleX = (float) (centerX + radius * Math.cos(Math.PI * i / 4));float circleY = (float) (centerY + radius * Math.sin(Math.PI *i/4));canvas.drawCircle(circleX, circleY, mRadius, mPaint);}if(isStart){mPaint.setColor(colors[currentPosition]);float cx = (float) (centerX + radius * Math.cos(Math.PI * currentPosition / 4));float cy = (float) (centerY + radius * Math.sin(Math.PI * currentPosition/4));canvas.drawCircle(cx, cy, mRadius, mPaint);}}//开始动画public void startAnimator() {isStart = true;new Thread(new Runnable() {@Overridepublic void run() {while(true){Log.i("Main", "currentPosition:"+currentPosition);postInvalidate();currentPosition++;if(currentPosition == 8){currentPosition = 0;}try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}}}).start();}//停止动画public void stopAnimator() {isStart = false;postInvalidate();}/*** 根据手机的分辨率从 dp 的单位 转成为 px(像素)*/public int dip2px(float dpValue) {final float scale = mContext.getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);}}

接下来是xml文件:
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><com.sky.view.CircleLoading android:id="@+id/circle_load"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"/></RelativeLayout>

最后是我们的MainActivity:
MainActivity.java

public class MainActivity extends Activity{private CircleLoading circleLoading;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);circleLoading = (CircleLoading) findViewById(R.id.circle_load);circleLoading.startAnimator();}}

有关自定义View的知识还是非常多的,这些还都是一些皮毛,有机会深入研究,继续更新。。。。

Android自定义View之仿金山词霸加载效果相关推荐

  1. android 自定义加载动画效果,Android自定义View实现loading动画加载效果

    项目开发中对Loading的处理是比较常见的,安卓系统提供的不太美观,引入第三发又太麻烦,这时候自己定义View来实现这个效果,并且进行封装抽取给项目提供统一的loading样式是最好的解决方式了. ...

  2. android 自定义view 动画效果,Android自定义view实现阻尼效果的加载动画

    效果: 需要知识: 1. 二次贝塞尔曲线 2. 动画知识 3. 基础自定义view知识 先来解释下什么叫阻尼运动 阻尼振动是指,由于振动系统受到摩擦和介质阻力或其他能耗而使振幅随时间逐渐衰减的振动,又 ...

  3. android 按钮添加动画,Android 自定义View画出按钮加载动画~

    声明:原创作品转载请注明出处http://www.jianshu.com/p/a0ffbc04c089 看了太多别人的文章,我觉得我也应该写点什么了~一是巩固自己的知识,二是共同学习,敢说我做的不好我 ...

  4. Android自定义View(四)——仿Android5.0波纹效果

    项目源码比较简单,直接看帖的代码就可以了. 说实话,我是真没有去看RippleView的源码,只是从表面看到它的效果,所以产生了一点思路,所以功能很有局限性,而且用起来也比较复杂,大家且看且喷就好^_ ...

  5. android 自定义取色器,【Android自定义View】仿Photoshop取色器ColorPicker(二)

    ColorPicker 一款仿Photoshop取色器的Android版取色器. 前言 上一篇已经简单介绍了ColorPicker的项目结构以及两种颜色空间,接下来我们详细解析一下ColorPicke ...

  6. android progressdialog 背景色,怎么在android中利用ProgressDialog实现一个加载效果

    怎么在android中利用ProgressDialog实现一个加载效果 发布时间:2020-12-07 17:00:07 来源:亿速云 阅读:77 作者:Leah 怎么在android中利用Progr ...

  7. android代码实现手机加速功能,Android自定义View实现内存清理加速球效果

    Android自定义View实现内存清理加速球效果 发布时间:2020-09-21 22:21:57 来源:脚本之家 阅读:105 作者:程序员的自我反思 前言 用过猎豹清理大师或者相类似的安全软件, ...

  8. Android 抖音爱心动画,Android自定义View实现抖音飘动红心效果

    本文实例为大家分享了Android自定义View实现抖音飘动红心效果的具体代码,供大家参考,具体内容如下 自定义View--抖音飘动红心 效果展示 动画效果 使用自定义view完成红心飘动效果 Vie ...

  9. android自定义radiogroup,Android 自定义View实现任意布局的RadioGroup效果

    前言 RadioGroup是继承LinearLayout,只支持横向或者竖向两种布局.所以在某些情况,比如多行多列布局,RadioGroup就并不适用 . 本篇文章通过继承RelativeLayout ...

  10. android 自定义红心,Android自定义View实现抖音飘动红心效果

    本文实例为大家分享了Android自定义View实现抖音飘动红心效果的具体代码,供大家参考,具体内容如下 自定义View--抖音飘动红心 效果展示 动画效果 使用自定义view完成红心飘动效果 Vie ...

最新文章

  1. 求捐“一杯奶茶钱”,西北大学真成“最穷211”?
  2. 红帽启动apache服务器_CentOS6.5环境下搭建Apache httpd服务器
  3. 大数据教程(10.6)自定义inputFormat(小文件合并)
  4. dedecms系统环境需求及注意事项是什么
  5. 嵌入式操作系统内核原理和开发(头文件调整)
  6. LeetCode 49 字母异位词分组
  7. 有序数组中的h引用 H-Index II
  8. 央视频卫视app直播收看教程(2021)
  9. 基于stc89c52的智能温控风扇
  10. 关于flash播放器不为人知的四大点
  11. 【整数规划算法】分支定界法及其Python代码实现
  12. java 事务控制_java中事务的管理
  13. 安装macOS时遇到Unable to unmount volume for repair异常导致无法完成安装的解决办法
  14. c语言编译笑脸,C语言快速入门——笑脸绘图程序:窗口实现
  15. 用计算机处理机读卡上,改卷子和登分程序及其注意事项以及一些操作
  16. kali linux安装upupoo_Kali Linux 下载、引导、安装
  17. Error: unknown command “push“ for “helm“ Helm安装push插件
  18. python实现erp系统后端_python开发erp教程《PYTHON编一套完整ERP系统,15万元能下来吗》...
  19. IDEA打包,运行等错误
  20. 中俄边城“丝路欢聚”共庆中国年

热门文章

  1. 计算机专业师范类分析,师范生应具备的信息技术能力分析
  2. 魔方阵原理及十种解法(C语言)
  3. iOS开发中向iPhone模拟器中添加视频资源
  4. 如何把照片kb缩小?详细步骤
  5. 如何将Kali Linux中的Firefox浏览器语言设置为中文
  6. HBuilderX开发的uniapp项目运行到微信小程序开发者工具上的方法
  7. UVa 12911 Subset Sum
  8. 【Golang】家庭收支记账软件
  9. 带有H5标签的字符串
  10. 基于cnn的人脸识别_人脸识别技术全面总结:从传统方法到深度学习