我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android自定义谷歌风格ProgressBar

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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自定义View 使用PathMeasure简单模仿系统ProgressBar(四)Android编程实现自定义ProgressBar样式示例(背景色及一级、二级进度条颜色)Android三种方式实现ProgressBar自定义圆形进度条Android编程ProgressBar自定义样式之动画模式实现方法android ListView和ProgressBar(进度条控件)的使用方法Android ProgressBar进度条和ProgressDialog进度框的展示DEMOAndroid ProgressBar进度条使用详解Android编程之自定义ProgressBar示例


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android自定义谷歌风格ProgressBar

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android自定义谷歌风格ProgressBar

本文实例为大家分享了谷歌风格ProgressBar的具体代码,供大家参考,具体内容如下具体代码package zms.demo.colorprogress; import android.content.Context; import an
2022-06-06

如何在Android中自定义ProgressBar

如何在Android中自定义ProgressBar?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体如下:
2023-05-30

Android自定义ViewGroup打造各种风格的SlidingMenu

上篇给大家介绍QQ5.0侧滑菜单的视频课程,对于侧滑的时的动画效果的实现有了新的认识,似乎打通了任督二脉,目前可以实现任意效果的侧滑菜单了,感谢鸿洋大大!! 用的是HorizontalScrollView来实现的侧滑菜单功能,Horizon
2022-06-06

怎么在Android中自定义一个ProgressBar控件

这篇文章将为大家详细讲解有关怎么在Android中自定义一个ProgressBar控件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。首先加载Drawable,在onMeasure设置好其区域
2023-05-30

Android歌词显示控件TextView自定义

======================================================================================1. 音乐播放,音乐播放,音乐播放放入服务中,那么App 退入后台音
2022-06-06

Android如何自定义View歌词控件

本篇内容介绍了“Android如何自定义View歌词控件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录前言一、 歌词解析1.歌词实体类L
2023-06-20

Android开发中如何实现自定义ProgressBar的样式

Android开发中如何实现自定义ProgressBar的样式?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。样式资源:progressbar_bg.xml,放在
2023-05-31

Android三种方式实现ProgressBar自定义圆形进度条

进度条样式在项目中经常可以见到,下面小编给大家分享Android三种方式实现ProgressBar自定义圆形进度条。 Android进度条有4种风格可以使用。 默认值是progressBarStyle。设置成progressBarStyle
2022-06-06

Android中怎么自定义ProgressBar实现酷炫进度条

要在Android中自定义ProgressBar并实现酷炫的进度条效果,你可以按照以下步骤进行操作:1. 创建一个新的自定义ProgressBar控件类:javapublic class CustomProgressBar extends
2023-10-18

Android自定义View 使用PathMeasure简单模仿系统ProgressBar(四)

使用PathMeasure简单模仿系统ProgressBar,效果如下:还蛮像的吧,有的人问了,系统自带的你闲的搞这个干嘛,当然是纯粹为了学习PathMeasure这个类。 PathMeasure是用来测量Path路径的,可以截取路径中某一
2022-06-06

Android Mars XLog 自定义存储格式

经过前两篇文章 Android 微信高性能日志存储库Xlog的使用 Android Mars XLog的编译 我们大概了解了XLog,但是微信开源的XLog日志库,格式是写死的,如下图所示那我们如果需要实现自定义的格式存储日志,该怎么办呢
2022-06-06

Android怎么自定义ProgressBar实现漂亮的进度提示框

这篇文章主要介绍“Android怎么自定义ProgressBar实现漂亮的进度提示框”,在日常操作中,相信很多人在Android怎么自定义ProgressBar实现漂亮的进度提示框问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
2023-07-02

Android编程ProgressBar自定义样式之动画模式实现方法

本文实例讲述了Android编程ProgressBar自定义样式之动画模式实现方法。分享给大家供大家参考,具体如下: 忘记在哪里看到的那位仁兄写的,就是通过用动画效果来实现的,现在顺便也把他写出来,希望那位仁兄不要见怪。 效果:和之前的一样
2022-06-06

Android自定义DataGridView数据表格控件

我是一个.net程序员,但是苦于公司要求开发一个android app,没办法,只能硬着头皮上了。 由于项目里面很多地方需要用到数据显示控件(类似于.net的DataGridView),度娘找了下发现没人公开类似的控件,没办法只好自己写了。
2022-06-06

Android自定义状态栏颜色与APP风格保持一致的实现方法

我们知道iOS上的应用,状态栏的颜色总能与应用标题栏颜色保持一致,用户体验很不错,那安卓是否可以呢?若是在安卓4.4之前,答案是否定的,但在4.4之后,谷歌允许开发者自定义状态栏背景颜色啦,这是个不错的体验!若你手机上安装有最新版的qq,并
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录