`
wuchengyi2015106
  • 浏览: 25034 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

牛逼的loading加载效果

阅读更多

牛逼的loading加载效果

 

介绍:

AnimatedCircleLoadingView一个不错的loading加载效果,自定义AnimatedCircleLoadingView设置startDeterminate()
方法启动loading页面动画setPercent()设置loading进度 ,重置resetLoading(),等几个重要方法实现。
本例子来自:http://www.itlanbao.com/code/20151208/10000/100681.html
本例子主要由TopCircleBorderView ,FinishedOkView,FinishedFailureView等实现。


主要代码实现类:

package com.github.jlmd.animatedcircleloadingview;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.util.AttributeSet;
import android.widget.FrameLayout;
import com.github.jlmd.animatedcircleloadingview.animator.ViewAnimator;
import com.github.jlmd.animatedcircleloadingview.component.InitialCenterCircleView;
import com.github.jlmd.animatedcircleloadingview.component.MainCircleView;
import com.github.jlmd.animatedcircleloadingview.component.PercentIndicatorView;
import com.github.jlmd.animatedcircleloadingview.component.RightCircleView;
import com.github.jlmd.animatedcircleloadingview.component.SideArcsView;
import com.github.jlmd.animatedcircleloadingview.component.TopCircleBorderView;
import com.github.jlmd.animatedcircleloadingview.component.finish.FinishedFailureView;
import com.github.jlmd.animatedcircleloadingview.component.finish.FinishedOkView;

/**
 * @author jlmd
 */
public class AnimatedCircleLoadingView extends FrameLayout {

  private static final String DEFAULT_HEX_MAIN_COLOR = "#FF9A00";
  private static final String DEFAULT_HEX_SECONDARY_COLOR = "#BDBDBD";
  private final Context context;
  private InitialCenterCircleView initialCenterCircleView;
  private MainCircleView mainCircleView;
  private RightCircleView rightCircleView;
  private SideArcsView sideArcsView;
  private TopCircleBorderView topCircleBorderView;
  private FinishedOkView finishedOkView;
  private FinishedFailureView finishedFailureView;
  private PercentIndicatorView percentIndicatorView;
  private ViewAnimator viewAnimator;
  private boolean startAnimationIndeterminate;
  private boolean startAnimationDeterminate;
  private boolean stopAnimationOk;
  private boolean stopAnimationFailure;
  private int mainColor;
  private int secondaryColor;

  public AnimatedCircleLoadingView(Context context) {
    super(context);
    this.context = context;
  }

  public AnimatedCircleLoadingView(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.context = context;
    initAttributes(attrs);
  }

  public AnimatedCircleLoadingView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    this.context = context;
    initAttributes(attrs);
  }

  private void initAttributes(AttributeSet attrs) {
    TypedArray attributes =
        getContext().obtainStyledAttributes(attrs, R.styleable.AnimatedCircleLoadingView);
    mainColor = attributes.getColor(R.styleable.AnimatedCircleLoadingView_mainColor,
        Color.parseColor(DEFAULT_HEX_MAIN_COLOR));
    secondaryColor = attributes.getColor(R.styleable.AnimatedCircleLoadingView_secondaryColor,
        Color.parseColor(DEFAULT_HEX_SECONDARY_COLOR));
    attributes.recycle();
  }

  @Override
  protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    init();
    startAnimation();
  }

  private void startAnimation() {
    if (getWidth() != 0 && getHeight() != 0) {
      if (startAnimationIndeterminate) {
        viewAnimator.startAnimator();
        startAnimationIndeterminate = false;
      }
      if (startAnimationDeterminate) {
        addView(percentIndicatorView);
        viewAnimator.startAnimator();
        startAnimationDeterminate = false;
      }
      if (stopAnimationOk) {
        stopOk();
      }
      if (stopAnimationFailure) {
        stopFailure();
      }
    }
  }

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // Force view to be a square
    super.onMeasure(widthMeasureSpec, widthMeasureSpec);
  }

  private void init() {
    initComponents();
    addComponentsViews();
    initAnimatorHelper();
  }

  private void initComponents() {
    int width = getWidth();
    initialCenterCircleView =
        new InitialCenterCircleView(context, width, mainColor, secondaryColor);
    rightCircleView = new RightCircleView(context, width, mainColor, secondaryColor);
    sideArcsView = new SideArcsView(context, width, mainColor, secondaryColor);
    topCircleBorderView = new TopCircleBorderView(context, width, mainColor, secondaryColor);
    mainCircleView = new MainCircleView(context, width, mainColor, secondaryColor);
    finishedOkView = new FinishedOkView(context, width, mainColor, secondaryColor);
    finishedFailureView = new FinishedFailureView(context, width, mainColor, secondaryColor);
    percentIndicatorView = new PercentIndicatorView(context, width);
  }

  private void addComponentsViews() {
    addView(initialCenterCircleView);
    addView(rightCircleView);
    addView(sideArcsView);
    addView(topCircleBorderView);
    addView(mainCircleView);
    addView(finishedOkView);
    addView(finishedFailureView);
  }

  private void initAnimatorHelper() {
    viewAnimator = new ViewAnimator();
    viewAnimator.setComponentViewAnimations(initialCenterCircleView, rightCircleView, sideArcsView,
        topCircleBorderView, mainCircleView, finishedOkView, finishedFailureView,
        percentIndicatorView);
  }

  public void startIndeterminate() {
    startAnimationIndeterminate = true;
    startAnimation();
  }

  public void startDeterminate() {
    startAnimationDeterminate = true;
    startAnimation();
  }

  public void setPercent(int percent) {
    if (percentIndicatorView != null) {
      percentIndicatorView.setPercent(percent);
      if (percent == 100) {
        viewAnimator.finishOk();
      }
    }
  }

  public void stopOk() {
    if (viewAnimator == null) {
      stopAnimationOk = true;
    } else {
      viewAnimator.finishOk();
    }
  }

  public void stopFailure() {
    if (viewAnimator == null) {
      stopAnimationFailure = true;
    } else {
      viewAnimator.finishFailure();
    }
  }

  public void resetLoading() {
    viewAnimator.resetAnimator();
    setPercent(0);
  }
}

///代码调用

public class MainActivity extends Activity {

  private AnimatedCircleLoadingView animatedCircleLoadingView;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    animatedCircleLoadingView = (AnimatedCircleLoadingView) findViewById(R.id.circle_loading_view);
    startLoading();
    startPercentMockThread();
  }

  private void startLoading() {
    animatedCircleLoadingView.startDeterminate();
  }

  private void startPercentMockThread() {
    Runnable runnable = new Runnable() {
      @Override
      public void run() {
        try {
          Thread.sleep(1500);
          for (int i = 0; i <= 100; i++) {
            Thread.sleep(65);
            changePercent(i);
          }
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    };
    new Thread(runnable).start();
  }

  private void changePercent(final int percent) {
    runOnUiThread(new Runnable() {
      @Override
      public void run() {
        animatedCircleLoadingView.setPercent(percent);
      }
    });
  }

  public void resetLoading() {
    runOnUiThread(new Runnable() {
      @Override
      public void run() {
        animatedCircleLoadingView.resetLoading();
      }
    });
  }
}

 

1
0
分享到:
评论

相关推荐

    winform loading加载框效果

    在Windows Forms(Winform)开发中,我们经常需要在执行耗时操作时向用户展示一个加载指示器,也就是所谓的“loading加载框效果”。这既是为了提高用户体验,让用户知道程序正在后台处理事务,也是为了避免用户在...

    H5多种加载效果loading,H5页面加载中动画

    本话题将深入探讨"H5多种加载效果loading",即H5页面在加载过程中使用的炫酷动画,旨在提升用户在等待页面完全加载时的体验。 一、什么是H5加载效果 H5加载效果,也称为“loading”或“预加载”,是指在页面内容...

    loading加载gif动画

    让我们深入探讨一下“loading加载gif动画”的相关知识点。 1. **GIF格式**:GIF(Graphics Interchange Format)是一种流行的图像文件格式,支持透明度和动画功能。由于其体积小、跨平台兼容性好,常用于网页设计中...

    懒人原生使用logo标志叠加显示loading加载效果

    这个效果主要是模拟新浪微博一个年度财报H5页面中的loading加载效果 由于本案例图片比较小,真正加载效果很快,所以用简单的js做了一个控制 主要展示的是加载的过程,喜欢的懒人可以模仿试试 主要传播的是一...

    3款漂亮的Flash Loading加载效果

    "3款漂亮的Flash Loading加载效果"是一个关于如何通过Flash技术提升用户体验的资源集合。Flash作为一种曾经广泛使用的动画和交互设计工具,其在创建动态加载效果方面具有独特的优势。 首先,我们要理解什么是Flash ...

    10款华丽的SVG Loading加载动画效果

    "10款华丽的SVG Loading加载动画效果"就是这样一个资源集合,它展示了如何巧妙地利用SVG(Scalable Vector Graphics)技术来创建动态、美观的加载动画。 SVG是一种基于XML的矢量图形格式,它的优点在于可以无限缩放...

    loading加载效果图片 300个.zip

    "loading加载效果图片 300个.zip" 这个压缩包显然包含了一组丰富的加载动画资源,总数达到300个,格式可能是GIF,因为文件名称列表中有"gif透明loading"。这种类型的图片通常用于指示程序正在处理数据或内容,用户...

    酷炫 html5页面加载 loading动画效果 demo 基于原生无第三方依赖

    本示例"酷炫html5页面加载loading动画效果demo"是基于原生JavaScript和CSS实现的,无需任何第三方库,简化了开发流程,提高了性能。 首先,我们来详细了解一下如何实现这种加载动画。在HTML结构中,我们需要在`...

    网页常用loading 加载gif图片素材

    在网页设计中,"加载"(loading)是一个关键的用户体验元素,特别是在内容丰富的网页或需要时间来完全加载的页面上。加载gif图片是为用户提供视觉反馈的一种常见方式,表明页面内容正在加载,让用户知道他们需要等待...

    android个性十足的loading加载效果.zip

    本资源"android个性十足的loading加载效果.zip"提供了一组独特的加载动画源码,旨在提升Android应用的视觉吸引力和交互体验。 加载效果的设计可以极大地影响用户对应用的感知,一个有创意的加载动画不仅能够减少...

    js实现页面loading加载效果1.rar

    本文将详细介绍如何使用JavaScript实现页面的loading加载效果。 一、基本原理 JavaScript是一种广泛使用的客户端脚本语言,它可以动态地更新HTML和CSS,从而实现各种动画效果。在创建loading加载效果时,我们通常会...

    加载效果Loading

    在前端开发中,加载效果(Loading)是一种至关重要的用户体验设计元素。它通常出现在网页或应用程序内容正在加载时,为用户提供视觉反馈,表明系统正在进行后台处理,让用户知道他们需要等待一段时间才能看到完整的...

    页面加载的Loading效果

    在网页设计中,用户体验是至关重要的,而页面加载的加载效果正是提升用户体验的一种方式。"页面加载的Loading效果"指的是在网页内容完全加载之前展示的一种动态视觉反馈,它告诉用户浏览器正在努力获取并呈现信息。...

    CSS3绿色Loading加载动画特效.zip

    在本文中,我们将深入探讨如何使用CSS3来创建引人注目的绿色Loading加载动画特效,以及这个特定的“CSS3绿色Loading加载动画特效.zip”文件可能包含的内容。CSS3是层叠样式表(Cascading Style Sheets)的第三个版本...

    jQuery和CSS3超酷loading加载动画特效

    waitMe是一款jQuery和CSS3超酷loading加载动画特效插件。该loading加载动画特效使用CSS3制作了14种不同的loading动画效果,并且你还可以使用图片作为loading动画。

    CSS3音阶波浪Loading加载动画代码

    CSS3音阶波浪Loading加载动画代码是一种创新且美观的加载效果,它利用了CSS3的强大功能来实现动态、交互式的视觉效果。下面将详细解析这个加载动画的设计原理和技术要点。 首先,CSS3(Cascading Style Sheets ...

    Bootstrap网页loading加载图标动画特效

    在这个特定的资源中,我们关注的是"Bootstrap网页loading加载图标动画特效",这是一种利用Bootstrap框架和CSS3技术来创建吸引用户注意力的加载指示器的方法。 首先,加载图标(Loading Icon)在网页设计中扮演着至...

    Android 适用各种布局的loading 加载

    总结来说,"Android 适用各种布局的loading加载"主要是通过自定义对话框库如`spots-dialog-master`中的`SpotsDialog`来实现的。这个库提供了丰富的自定义选项,使得在Android应用中创建具有iOS风格的水滴加载效果...

    .net winform c# 加载过程的 源码 loading 动画动态般的效果。 大型软件 大软件 运行加载 所显示的动态加载什么什么的效果

    .net winform c# 加载过程的 源码 loading 动画动态般的效果。 大型软件 大软件 运行加载 所显示的动态加载什么什么的效果 怎么描述比较好呢,总之,就是一个动态的现在正在加载什么什么的。 尤其大的软件,如果...

Global site tag (gtag.js) - Google Analytics