全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android自定义谷歌风格ProgressBar

本文实例为大家分享了谷歌风格ProgressBar的具体代码,供大家参考,具体内容如下

具体代码

package zms.demo.colorprogress;

import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.Interpolator;
import android.view.animation.LinearInterpolator;
import android.widget.ProgressBar;

public class GoogleProgressBar extends ProgressBar {

  private static final int INTERPOLATOR_ACCELERATE = 0;
  private static final int INTERPOLATOR_LINEAR = 1;
  private static final int INTERPOLATOR_ACCELERATEDECELERATE = 2;
  private static final int INTERPOLATOR_DECELERATE = 3;

  public GoogleProgressBar(Context context) {
    this(context, null);
  }

  public GoogleProgressBar(Context context, AttributeSet attrs) {
    this(context, attrs, R.attr.googleProgressStyle);
  }

  public GoogleProgressBar(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

    if (isInEditMode()) {
      setIndeterminateDrawable(new GoogleProgressDrawable.Builder(
          context, true).build());
      return;
    }

    Resources res = context.getResources();
    TypedArray a = context.obtainStyledAttributes(attrs,
        R.styleable.GoogleStyleProgressBar, defStyle, 0);

    final int color = a.getColor(R.styleable.GoogleStyleProgressBar_color,
        res.getColor(R.color.default_color));
    final int sectionsCount = a.getInteger(
        R.styleable.GoogleStyleProgressBar_sections_count,
        res.getInteger(R.integer.default_sections_count));
    final int separatorLength = a
        .getDimensionPixelSize(
            R.styleable.GoogleStyleProgressBar_stroke_separator_length,
            res.getDimensionPixelSize(R.dimen.default_stroke_separator_length));
    final float strokeWidth = a.getDimension(
        R.styleable.GoogleStyleProgressBar_stroke_width,
        res.getDimension(R.dimen.default_stroke_width));
    final float speed = a.getFloat(
        R.styleable.GoogleStyleProgressBar_speed,
        Float.parseFloat(res.getString(R.string.default_speed)));
    final float speedProgressiveStart = a.getFloat(
        R.styleable.GoogleStyleProgressBar_progressiveStart_speed,
        speed);
    final float speedProgressiveStop = a
        .getFloat(
            R.styleable.GoogleStyleProgressBar_progressiveStop_speed,
            speed);
    final int iInterpolator = a.getInteger(
        R.styleable.GoogleStyleProgressBar_interpolator, -1);
    final boolean reversed = a.getBoolean(
        R.styleable.GoogleStyleProgressBar_reversed,
        res.getBoolean(R.bool.default_reversed));
    final boolean mirrorMode = a.getBoolean(
        R.styleable.GoogleStyleProgressBar_mirror_mode,
        res.getBoolean(R.bool.default_mirror_mode));
    final int colorsId = a.getResourceId(
        R.styleable.GoogleStyleProgressBar_colors, 0);
    final boolean progressiveStartActivated = a.getBoolean(
        R.styleable.GoogleStyleProgressBar_progressiveStart_activated,
        res.getBoolean(R.bool.default_progressiveStart_activated));
    final Drawable backgroundDrawable = a
        .getDrawable(R.styleable.GoogleStyleProgressBar_background);
    final boolean generateBackgroundWithColors = a
        .getBoolean(
            R.styleable.GoogleStyleProgressBar_generate_background_with_colors,
            false);
    final boolean gradients = a.getBoolean(
        R.styleable.GoogleStyleProgressBar_gradients, false);
    a.recycle();

    // interpolator
    Interpolator interpolator = null;
    if (iInterpolator == -1) {
      interpolator = getInterpolator();
    }
    if (interpolator == null) {
      switch (iInterpolator) {
      case INTERPOLATOR_ACCELERATEDECELERATE:
        interpolator = new AccelerateDecelerateInterpolator();
        break;
      case INTERPOLATOR_DECELERATE:
        interpolator = new DecelerateInterpolator();
        break;
      case INTERPOLATOR_LINEAR:
        interpolator = new LinearInterpolator();
        break;
      case INTERPOLATOR_ACCELERATE:
      default:
        interpolator = new AccelerateInterpolator();
      }
    }

    int[] colors = null;
    // colors
    if (colorsId != 0) {
      colors = res.getIntArray(colorsId);
    }

    GoogleProgressDrawable.Builder builder = new GoogleProgressDrawable.Builder(
        context).speed(speed)
        .progressiveStartSpeed(speedProgressiveStart)
        .progressiveStopSpeed(speedProgressiveStop)
        .interpolator(interpolator).sectionsCount(sectionsCount)
        .separatorLength(separatorLength).strokeWidth(strokeWidth)
        .reversed(reversed).mirrorMode(mirrorMode)
        .progressiveStart(progressiveStartActivated)
        .gradients(gradients);

    if (backgroundDrawable != null) {
      builder.backgroundDrawable(backgroundDrawable);
    }

    if (generateBackgroundWithColors) {
      builder.generateBackgroundUsingColors();
    }

    if (colors != null && colors.length > 0)
      builder.colors(colors);
    else
      builder.color(color);

    GoogleProgressDrawable d = builder.build();
    setIndeterminateDrawable(d);
  }

  public void applyStyle(int styleResId) {
    TypedArray a = getContext().obtainStyledAttributes(null,
        R.styleable.GoogleStyleProgressBar, 0, styleResId);

    if (a.hasValue(R.styleable.GoogleStyleProgressBar_color)) {
      setSmoothProgressDrawableColor(a.getColor(
          R.styleable.GoogleStyleProgressBar_color, 0));
    }
    if (a.hasValue(R.styleable.GoogleStyleProgressBar_colors)) {
      int colorsId = a.getResourceId(
          R.styleable.GoogleStyleProgressBar_colors, 0);
      if (colorsId != 0) {
        int[] colors = getResources().getIntArray(colorsId);
        if (colors != null && colors.length > 0)
          setSmoothProgressDrawableColors(colors);
      }
    }
    if (a.hasValue(R.styleable.GoogleStyleProgressBar_sections_count)) {
      setSmoothProgressDrawableSectionsCount(a.getInteger(
          R.styleable.GoogleStyleProgressBar_sections_count, 0));
    }
    if (a.hasValue(R.styleable.GoogleStyleProgressBar_stroke_separator_length)) {
      setSmoothProgressDrawableSeparatorLength(a.getDimensionPixelSize(
          R.styleable.GoogleStyleProgressBar_stroke_separator_length,
          0));
    }
    if (a.hasValue(R.styleable.GoogleStyleProgressBar_stroke_width)) {
      setSmoothProgressDrawableStrokeWidth(a.getDimension(
          R.styleable.GoogleStyleProgressBar_stroke_width, 0));
    }
    if (a.hasValue(R.styleable.GoogleStyleProgressBar_speed)) {
      setSmoothProgressDrawableSpeed(a.getFloat(
          R.styleable.GoogleStyleProgressBar_speed, 0));
    }
    if (a.hasValue(R.styleable.GoogleStyleProgressBar_progressiveStart_speed)) {
      setSmoothProgressDrawableProgressiveStartSpeed(a.getFloat(
          R.styleable.GoogleStyleProgressBar_progressiveStart_speed,
          0));
    }
    if (a.hasValue(R.styleable.GoogleStyleProgressBar_progressiveStop_speed)) {
      setSmoothProgressDrawableProgressiveStopSpeed(a
          .getFloat(
              R.styleable.GoogleStyleProgressBar_progressiveStop_speed,
              0));
    }
    if (a.hasValue(R.styleable.GoogleStyleProgressBar_reversed)) {
      setSmoothProgressDrawableReversed(a.getBoolean(
          R.styleable.GoogleStyleProgressBar_reversed, false));
    }
    if (a.hasValue(R.styleable.GoogleStyleProgressBar_mirror_mode)) {
      setSmoothProgressDrawableMirrorMode(a.getBoolean(
          R.styleable.GoogleStyleProgressBar_mirror_mode, false));
    }
    if (a.hasValue(R.styleable.GoogleStyleProgressBar_progressiveStart_activated)) {
      setProgressiveStartActivated(a
          .getBoolean(
              R.styleable.GoogleStyleProgressBar_progressiveStart_activated,
              false));
    }
    if (a.hasValue(R.styleable.GoogleStyleProgressBar_progressiveStart_activated)) {
      setProgressiveStartActivated(a
          .getBoolean(
              R.styleable.GoogleStyleProgressBar_progressiveStart_activated,
              false));
    }
    if (a.hasValue(R.styleable.GoogleStyleProgressBar_gradients)) {
      setSmoothProgressDrawableUseGradients(a.getBoolean(
          R.styleable.GoogleStyleProgressBar_gradients, false));
    }
    if (a.hasValue(R.styleable.GoogleStyleProgressBar_generate_background_with_colors)) {
      if (a.getBoolean(
          R.styleable.GoogleStyleProgressBar_generate_background_with_colors,
          false)) {
        setSmoothProgressDrawableBackgroundDrawable(GoogleProgressBarUtils
            .generateDrawableWithColors(
                checkIndeterminateDrawable().getColors(),
                checkIndeterminateDrawable().getStrokeWidth()));
      }
    }
    if (a.hasValue(R.styleable.GoogleStyleProgressBar_interpolator)) {
      int iInterpolator = a.getInteger(
          R.styleable.GoogleStyleProgressBar_interpolator, -1);
      Interpolator interpolator;
      switch (iInterpolator) {
      case INTERPOLATOR_ACCELERATEDECELERATE:
        interpolator = new AccelerateDecelerateInterpolator();
        break;
      case INTERPOLATOR_DECELERATE:
        interpolator = new DecelerateInterpolator();
        break;
      case INTERPOLATOR_LINEAR:
        interpolator = new LinearInterpolator();
        break;
      case INTERPOLATOR_ACCELERATE:
        interpolator = new AccelerateInterpolator();
        break;
      default:
        interpolator = null;
      }
      if (interpolator != null) {
        setInterpolator(interpolator);
      }
    }
    a.recycle();
  }

  @Override
  protected synchronized void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (isIndeterminate()
        && getIndeterminateDrawable() instanceof GoogleProgressDrawable
        && !((GoogleProgressDrawable) getIndeterminateDrawable())
            .isRunning()) {
      getIndeterminateDrawable().draw(canvas);
    }
  }

  private GoogleProgressDrawable checkIndeterminateDrawable() {
    Drawable ret = getIndeterminateDrawable();
    if (ret == null || !(ret instanceof GoogleProgressDrawable))
      throw new RuntimeException(
          "The drawable is not a SmoothProgressDrawable");
    return (GoogleProgressDrawable) ret;
  }

  @Override
  public void setInterpolator(Interpolator interpolator) {
    super.setInterpolator(interpolator);
    Drawable ret = getIndeterminateDrawable();
    if (ret != null && (ret instanceof GoogleProgressDrawable))
      ((GoogleProgressDrawable) ret).setInterpolator(interpolator);
  }

  public void setSmoothProgressDrawableInterpolator(Interpolator interpolator) {
    checkIndeterminateDrawable().setInterpolator(interpolator);
  }

  public void setSmoothProgressDrawableColors(int[] colors) {
    checkIndeterminateDrawable().setColors(colors);
  }

  public void setSmoothProgressDrawableColor(int color) {
    checkIndeterminateDrawable().setColor(color);
  }

  public void setSmoothProgressDrawableSpeed(float speed) {
    checkIndeterminateDrawable().setSpeed(speed);
  }

  public void setSmoothProgressDrawableProgressiveStartSpeed(float speed) {
    checkIndeterminateDrawable().setProgressiveStartSpeed(speed);
  }

  public void setSmoothProgressDrawableProgressiveStopSpeed(float speed) {
    checkIndeterminateDrawable().setProgressiveStopSpeed(speed);
  }

  public void setSmoothProgressDrawableSectionsCount(int sectionsCount) {
    checkIndeterminateDrawable().setSectionsCount(sectionsCount);
  }

  public void setSmoothProgressDrawableSeparatorLength(int separatorLength) {
    checkIndeterminateDrawable().setSeparatorLength(separatorLength);
  }

  public void setSmoothProgressDrawableStrokeWidth(float strokeWidth) {
    checkIndeterminateDrawable().setStrokeWidth(strokeWidth);
  }

  public void setSmoothProgressDrawableReversed(boolean reversed) {
    checkIndeterminateDrawable().setReversed(reversed);
  }

  public void setSmoothProgressDrawableMirrorMode(boolean mirrorMode) {
    checkIndeterminateDrawable().setMirrorMode(mirrorMode);
  }

  public void setProgressiveStartActivated(boolean progressiveStartActivated) {
    checkIndeterminateDrawable().setProgressiveStartActivated(
        progressiveStartActivated);
  }

  public void setSmoothProgressDrawableCallbacks(
      GoogleProgressDrawable.Callbacks listener) {
    checkIndeterminateDrawable().setCallbacks(listener);
  }

  public void setSmoothProgressDrawableBackgroundDrawable(Drawable drawable) {
    checkIndeterminateDrawable().setBackgroundDrawable(drawable);
  }

  public void setSmoothProgressDrawableUseGradients(boolean useGradients) {
    checkIndeterminateDrawable().setUseGradients(useGradients);
  }

  public void progressiveStart() {
    checkIndeterminateDrawable().progressiveStart();
  }

  public void progressiveStop() {
    checkIndeterminateDrawable().progressiveStop();
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android  # ProgressBar  # Android自定义View 使用PathMeasure简单模仿系统ProgressBar(四)  # Android编程实现自定义ProgressBar样式示例(背景色及一级、二级进度条颜色)  # Android三种方式实现ProgressBar自定义圆形进度条  # Android编程ProgressBar自定义样式之动画模式实现方法  # android ListView和ProgressBar(进度条控件)的使用方法  # Android ProgressBar进度条和ProgressDialog进度框的展示DEMO  # Android ProgressBar进度条使用详解  # Android编程之自定义ProgressBar示例  # 大家分享  # 具体内容  # 大家多多  # styleable  # GoogleStyleProgressBar  # color  # return  # getResources  # obtainStyledAttributes  # sectionsCount  # getInteger  # GoogleStyleProgressBar_sections_count  # getColor  # GoogleStyleProgressBar_color  # default_color  # googleProgressStyle  # defStyle  # super  # null  # attrs 


相关文章: 详解jQuery中基本的动画方法  建站之星×万网:智能建站系统+自助建站平台一键生成  网站专业制作公司有哪些,做一个公司网站要多少钱?  如何通过万网虚拟主机快速搭建网站?  Android自定义listview布局实现上拉加载下拉刷新功能  C#如何使用XPathNavigator高效查询XML  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  Java解压缩zip - 解压缩多个文件或文件夹实例  如何快速搭建支持数据库操作的智能建站平台?  如何快速搭建自助建站会员专属系统?  网站制作报价单模板图片,小松挖机官方网站报价?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  如何在宝塔面板创建新站点?  北京企业网站设计制作公司,北京铁路集团官方网站?  宿州网站制作公司兴策,安徽省低保查询网站?  浅析上传头像示例及其注意事项  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  建站主机选购指南与交易推荐:核心配置解析  如何将凡科建站内容保存为本地文件?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  如何有效防御Web建站篡改攻击?  深圳网站制作平台,深圳市做网站好的公司有哪些?  如何在西部数码注册域名并快速搭建网站?  html制作网站的步骤有哪些,iapp如何添加网页?  建站ABC备案流程中有哪些关键注意事项?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  广平建站公司哪家专业可靠?如何选择?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  太原网站制作公司有哪些,网约车营运证查询官网?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  成都网站制作报价公司,成都工业用气开户费用?  建站之星后台管理:高效配置与模板优化提升用户体验  微信推文制作网站有哪些,怎么做微信推文,急?  建站之星安装模板失败:服务器环境不兼容?  建站VPS配置与SEO优化指南:关键词排名提升策略  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  外贸公司网站制作哪家好,maersk船公司官网?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  建站之星代理商如何保障技术支持与售后服务?  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  C++时间戳转换成日期时间的步骤和示例代码  PHP 500报错的快速解决方法  如何在建站之星绑定自定义域名?  制作门户网站的参考文献在哪,小说网站怎么建立?  制作网站怎么制作,*游戏网站怎么搭建?  Android自定义控件实现温度旋转按钮效果 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。