【问题标题】:Changing background color of Indeterminate Horizontal ProgressBar更改不确定水平进度条的背景颜色
【发布时间】:2017-01-24 21:17:23
【问题描述】:

我看过一些关于处理 ProgressBars 颜色的主题,但没有人能回答我的疑问。

我使用的是水平的ProgressBar Indeterminate 类型。 我希望它有一个透明的背景,同时有一个彩色的进度条,但找不到办法。

对于普通的 ProgressBar(不是 Indeterminate),我可以通过调用 progressBar.getProgressDrawable() 来获取 LayerDrawable。然后使用findDrawableByLayerId(android.R.id.background),我可以只为背景着色。

但是使用progressBar.getIndeterminateDrawable() 它返回给我GradientDrawable,所以我不能遵循相同的程序。

是否可以从GradientDrawable 获取所有 API 级别的颜色?因为如果是,我可以获取背景颜色并更改它。

有什么解决办法吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    像这样使用颜色过滤器:

    progressBar.getIndeterminateDrawable().setColorFilter(color, PorterDuff.Mode.MULTIPLY);
    

    【讨论】:

      【解决方案2】:

      progressBar.setProgressDrawable(R.drawable.progress_bar);

      drawable/progress_bar.xml

      <layer-list   xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:id="@android:id/background">
          <shape>
              <corners android:radius="2dip" />
              <gradient android:startColor="#43ffffff" android:centerColor="#43ffffff" android:centerY="0.75" android:endColor="#43ffffff" android:angle="270" />
          </shape>
      </item>
      <item android:id="@android:id/progress">
          <clip>
              <shape>
                  <corners android:radius="2dip" />
                  <gradient android:startColor="#fff" android:endColor="#fff" android:angle="270" />
              </shape>
          </clip>
      </item> </layer-list>
      

      你可以改变这个progress_bar.xml drawable的颜色

      【讨论】:

        【解决方案3】:

        第 1 步:将 drawable/progress_indeterminate_horizontal.xml 从您的 SDK 资源复制到您的项目中。

        第 2 步:将 drawable-hdpi/progressbar_indeterminate* 从您的 SDK 资源复制到您的项目中。

        第 3 步:将 drawable-mdpi/progressbar_indeterminate* 从您的 SDK 资源复制到您的项目中。

        第 4 步:修改 PNG 文件以使其看起来符合您的要求。

        第 5 步:修改 progress_indeterminate_horizontal.xml 以指向您的 PNG 文件(相对于标准文件)。

        第 6 步:使用 @drawable/progress_indeterminate_horizontal 作为 indeterminateDrawable 值。

        Source

        其他

        progressBar.getIndeterminateDrawable()
            .setColorFilter(progressBar.getContext().getResources().getColor(<colorId>),
                PorterDuff.Mode.SRC_IN);
        

        【讨论】:

        • 这会改变我项目中的所有 Indeterminate 进度条,对吧?如果是这样,是否有任何解决方法可以将其应用于我项目中的单个进度条?
        • @AndroidDev,(第 1 个)为所有人,(第 2 个)不,为特定的人
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-20
        • 1970-01-01
        • 1970-01-01
        • 2012-08-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-15
        相关资源
        最近更新 更多