自定义加载loading view动画组件的使用。
在github上找的一个有点酷炫的loading动画https://github.com/Fichardu/CircleProgress
我写写使用步骤
自定义view(CircleProgress )的代码
- package com.hysmarthotel.view;
- import com.hysmarthotel.roomcontrol.R;
- import com.hysmarthotel.util.EaseInOutCubicInterpolator;
- import android.animation.TimeInterpolator;
- import android.content.Context;
- import android.content.res.TypedArray;
- import android.graphics.Canvas;
- import android.graphics.Paint;
- import android.graphics.Point;
- import android.util.AttributeSet;
- import android.view.View;
- import android.view.animation.AnimationUtils;
- public class CircleProgress extends View {
- private static final int RED = 0xFFE5282C;
- private static final int YELLOW = 0xFF1F909A;
- private static final int BLUE = 0xFFFC9E12;
- private static final int COLOR_NUM = 3;
- private int[] COLORS;
- private TimeInterpolator mInterpolator = new EaseInOutCubicInterpolator();
- private final double DEGREE = Math.PI / 180;
- private Paint mPaint;
- private int mViewSize;
- private int mPointRadius;
- private long mStartTime;
- private long mPlayTime;
- private boolean mStartAnim = false;
- private Point mCenter = new Point();
- private ArcPoint[] mArcPoint;
- private static final int POINT_NUM = 15;
- private static final int DELTA_ANGLE = 360 / POINT_NUM;
- private long mDuration = 3600;
- public CircleProgress(Context context) {
- super(context);
- init(null, 0);
- }
- public CircleProgress(Context context, AttributeSet attrs) {
- super(context, attrs);
- init(attrs, 0);
- }
- public CircleProgress(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- init(attrs, defStyle);
- }
- private void init(AttributeSet attrs, int defStyle) {
- mArcPoint = new ArcPoint[POINT_NUM];
- mPaint = new Paint();
- mPaint.setAntiAlias(true);
- mPaint.setStyle(Paint.Style.FILL);
- TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.CircleProgress, defStyle, 0);
- int color1 = a.getColor(R.styleable.CircleProgress_color1, RED);
- int color2 = a.getColor(R.styleable.CircleProgress_color2, YELLOW);
- int color3 = a.getColor(R.styleable.CircleProgress_color3, BLUE);
- a.recycle();
- COLORS = new int[]{color1, color2, color3};
- }
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- int defaultSize = getResources().getDimensionPixelSize(R.dimen.default_circle_view_size);
- int width = getDefaultSize(defaultSize, widthMeasureSpec);
- int height = getDefaultSize(defaultSize, heightMeasureSpec);
- mViewSize = Math.min(width, height);
- setMeasuredDimension(mViewSize, mViewSize);
- mCenter.set(mViewSize / 2, mViewSize / 2);
- calPoints(1.0f);
- }
- @Override
- protected void onDraw(Canvas canvas) {
- canvas.save();
- canvas.translate(mCenter.x, mCenter.y);
- float factor = getFactor();
- canvas.rotate(36 * factor);
- float x, y;
- for (int i = 0; i < POINT_NUM; ++i) {
- mPaint.setColor(mArcPoint[i].color);
- float itemFactor = getItemFactor(i, factor);
- x = mArcPoint[i].x - 2 * mArcPoint[i].x * itemFactor;
- y = mArcPoint[i].y - 2 * mArcPoint[i].y * itemFactor;
- canvas.drawCircle(x, y, mPointRadius, mPaint);
- }
- canvas.restore();
- if (mStartAnim) {
- postInvalidate();
- }
- }
- private void calPoints(float factor) {
- int radius = (int) (mViewSize / 3 * factor);
- mPointRadius = radius / 12;
- for (int i = 0; i < POINT_NUM; ++i) {
- float x = radius * -(float) Math.sin(DEGREE * DELTA_ANGLE * i);
- float y = radius * -(float) Math.cos(DEGREE * DELTA_ANGLE * i);
- ArcPoint point = new ArcPoint(x, y, COLORS[i % COLOR_NUM]);
- mArcPoint[i] = point;
- }
- }
- private float getFactor() {
- if (mStartAnim) {
- mPlayTime = AnimationUtils.currentAnimationTimeMillis() - mStartTime;
- }
- float factor = mPlayTime / (float) mDuration;
- return factor % 1f;
- }
- private float getItemFactor(int index, float factor) {
- float itemFactor = (factor - 0.66f / POINT_NUM * index) * 3;
- if (itemFactor < 0f) {
- itemFactor = 0f;
- } else if (itemFactor > 1f) {
- itemFactor = 1f;
- }
- return mInterpolator.getInterpolation(itemFactor);
- }
- public void startAnim() {
- mPlayTime = mPlayTime % mDuration;
- mStartTime = AnimationUtils.currentAnimationTimeMillis() - mPlayTime;
- mStartAnim = true;
- postInvalidate();
- }
- public void reset() {
- stopAnim();
- mPlayTime = 0;
- postInvalidate();
- }
- public void stopAnim() {
- mStartAnim = false;
- }
- public void setInterpolator(TimeInterpolator interpolator) {
- mInterpolator = interpolator;
- }
- public void setDuration(long duration) {
- mDuration = duration;
- }
- public void setRadius(float factor) {
- stopAnim();
- calPoints(factor);
- startAnim();
- }
- static class ArcPoint {
- float x;
- float y;
- int color;
- ArcPoint(float x, float y, int color) {
- this.x = x;
- this.y = y;
- this.color = color;
- }
- }
- }
EaseInOutCubicInterpolator是自定义view(CircleProgress )中要是用的一个工具
- package com.hysmarthotel.util;
- import android.animation.TimeInterpolator;
- public class EaseInOutCubicInterpolator implements TimeInterpolator {
- @Override
- public float getInterpolation(float input) {
- if ((input *= 2) < 1.0f) {
- return 0.5f * input * input * input;
- }
- input -= 2;
- return 0.5f * input * input * input + 1;
- }
- }
在activity中的调用(还有一些其他用法可以自己看看github上的源代码)
- mProgressView = (CircleProgress)findViewById(R.id.progress_vie);
- mProgressView.startAnim(); //开始
- mProgressView.stopAnim(); //结束
- mProgressView.setRadius(factor); //半径
- mProgressView.reset(); //复原
在xml文件中的布局
- <?xml version="1.0" encoding="utf-8"?>
- <AbsoluteLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:circleprogress="http://schemas.android.com/apk/res/com.hysmarthotel.roomcontrol" //这个地方记得要加 //包名
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@drawable/bg1" >
- <com.hysmarthotel.view.CircleProgress //类名
- android:id="@+id/progress_vie"
- android:layout_x="350.5px"
- android:layout_y="150.0px"
- android:layout_width="1140.0px"
- android:layout_height="700.0px"
- circleprogress:color1="@android:color/holo_red_light" //这些参数就是通过xmlns:circleprogress,和attrs文件相关联的
- circleprogress:color2="@android:color/holo_green_light"
- circleprogress:color3="@android:color/holo_blue_light" />
自己在values目录中新建的attrs文件,这是与自定义view中自定义参数相关的
- <declare-styleable name="CircleProgress">
- <attr name="color1" format="reference|color"/>
- <attr name="color2" format="reference|color"/>
- <attr name="color3" format="reference|color"/>
- </declare-styleable>
自己在values目录中新建的dimens文件,这个只是几个颜色参数
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <dimen name="activity_horizontal_margin">16dp</dimen>
- <dimen name="activity_vertical_margin">16dp</dimen>
- <dimen name="default_circle_view_size">200dp</dimen>
- </resources>
自定义加载loading view动画组件的使用。的更多相关文章
- 页面预加载loading动画,再载入内容
默认情况下如果网站请求速度慢,所以会有一段时间的空白页面等等,用户体验效果不好,见到很多的页面都有预加载的效果,加载之前先加载一个动画,后台进程继续加载页面内容,当页面内容加载完之后再退出动画显示内容 ...
- Android 自定义View修炼-自定义加载进度动画XCLoadingImageView
一.概述 本自定义View,是加载进度动画的自定义View,继承于ImageView来实现,主要实现蒙层加载进度的加载进度效果. 支持水平左右加载和垂直上下加载四个方向,同时也支持自定义蒙层进度颜色. ...
- [Swift通天遁地]五、高级扩展-(11)图像加载Loading动画效果的自定义和缓存
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- React Native封装Toast与加载Loading组件
React Native开发封装Toast与加载Loading组件 在App开发中,我们避免不了使用的两个组件,一个Toast,一个网络加载Loading,在RN开发中,也是一样,React Nati ...
- html自定义加载动画
整体代码 HTML 实现自定义加载动画,话不多说如下代码所示: <!DOCTYPE html> <html lang="en"> <head> ...
- 纯css3 加载loading动画特效
最近项目中要实现当页面还没有加载完给用户提示正在加载的loading,本来是想做个图片提示的,但是图片如果放大电脑的分辨率就会感觉到很虚,体验效果很不好.于是就采用css3+js实现这个loading ...
- 简易仿ios菊花加载loading图
原文链接:https://mp.weixin.qq.com/s/wBbQgOfr59wntNK9ZJ5iRw 项目中经常会用到加载数据的loading显示图,除了设计根据app自身设计的动画loadi ...
- 一个很酷的加载loading效果--IT蓝豹
一个很酷的加载loading效果,自定义LeafLoadingView实现,LeafLoadingView继承view, 本例子主要由以下几点构成 (1):RotateAnimation实现叶子旋转 ...
- Android:webView加载h5网页视频,播放不了,以及横屏全屏的问题和实现自定义加载进度条的效果
1.webView加载h5网页视频,播放不了,android3.0之后要在menifest添加硬件加速的属性 android:hardwareAccelerated="true". ...
随机推荐
- Eclipse迁移到Android studio步骤如下:
一.从Eclipse中导出:1.将你的ADT插件版本升级到22.0以上.2.在Eclipse中,选择File-->Export.3.在弹出的导出窗口中,打开Android的文件夹,选择“Gene ...
- Java中的网络编程
Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的 C/S程序应用:客户/服务器模式,如QQ客户端 ...
- mac+php+xdebug+phpstorm在苹果下配置xdebug一波三折
1.下载xdebug文件 http://xdebug.org/wizard.php 将phpinfo()的源代码复制到文本框中,xdebug会提示如何配置和下载哪个版本的xdebug. 全部下载地址: ...
- php上传功能集后缀名判断和随机命名
form.php <html> <head> <meta http-equiv="content-type" content="text/h ...
- 【类库】私房干货.Net数据层方法的封装
[类库]私房干货.Net数据层方法的封装 作者:白宁超 时间:2016年3月5日22:51:47 摘要:继上篇<Oracle手边常用70则脚本知识汇总>文章的发表,引起很多朋友关注.便促使 ...
- 【Java】 环境变量如何配置?
Java知识简介与环境变量配置问题 一.在学习一门语言中,不仅需要掌握其语法结构,开发平台以及环境也是很重要的.在开始Java学习之前首先对其进行压缩包的下载安装,以及开发平台环境下载安装.基于此下面 ...
- 1Z0-053 争议题目解析304
1Z0-053 争议题目解析304 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 304.What privileges must be granted to allow an a ...
- 韩顺平_linux_随堂笔记
这还是自己3年前(2011年)整理的笔记,记得当时那会儿自己对Linux还特别的憧憬,也很喜欢韩老师的讲课风格,边看边做笔记乐此不彼,现在开通了技术博客,所以把当年的笔记也放上来和大家分享.同时推荐没 ...
- 前端开发编辑器(notepad++、sublime text)
1.Notepad++ 正则替换: 如<td>第三节</td> 替换成<td><input type="text" value=" ...
- 如何让你的网站支持https
如何让你的网站支持https 当今世界的主流网站基本都是使用https对外界提供服务,甚至有某些公司建议完全使用https, 那么https是什么呢?请参考如下的图解,https是在我们通常说的tcp ...