Android 自定义水平进度条位图可绘制对象被拉伸

发布于 2024-12-04 16:25:43 字数 1708 浏览 1 评论 0原文

我正在 Android 应用程序中使用可绘制的自定义进度条作为水平进度条。这是一个两层可绘制的。第一层是带有 tileMode="repeat" 的斜条纹 png 图像。第二层在条纹上添加阴影。这是 Progress_bar_horizo​​ntal.xml 可绘制对象的样子:

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/progress">
      <clip>
        <layer-list>
          <item>
            <bitmap android:src="@drawable/diagonal_stripes_0" android:tileMode="repeat" />
          </item>
          <item>
            <nine-patch android:src="@drawable/inset_shadow" />
          </item>
        </layer-list>
      </clip>
    </item>
    </layer-list>

该可绘制对象在主题中用于重新设计进度条控件的样式:

    <style name="Theme.Custom" parent="android:Theme.Light">
      <item name="android:progressBarStyleHorizontal">@style/Widget.ProgressBar.Horizontal.Custom</item>
    </style>

    <style name="Widget.ProgressBar.Horizontal.Custom" parent="android:Widget.ProgressBar.Horizontal">
      <item name="android:background">@drawable/bg_inset_gray</item>
      <item name="android:progressDrawable">@drawable/progress_bar_horizontal</item>
      <item name="android:indeterminateDrawable">@drawable/progress_bar_indeterminate_horizontal</item>
    </style>

这个想法是制作一个斜条纹进度条,它不会拉伸,但宽度会随着操作的进行而增加。这就是使用 的原因。

大多数时候它工作得很好。然而,有时(没有任何机会故意重现)它开始拉伸可绘制的单个图块,而不是适当地剪切它。

该应用程序使用 android:minSdkVersion="7" 开发,并在采用 Android 2.2 的 HTC Desire 上运行。

任何帮助将不胜感激。

I am using custom progress bar drawable for horizontal progress bar in Android application. It is a two-leyered drawable. First layer is diagonally striped png image with tileMode="repeat". Second layer adds shadow over the stripes. This is how the progress_bar_horizontal.xml drawable looks like:

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/progress">
      <clip>
        <layer-list>
          <item>
            <bitmap android:src="@drawable/diagonal_stripes_0" android:tileMode="repeat" />
          </item>
          <item>
            <nine-patch android:src="@drawable/inset_shadow" />
          </item>
        </layer-list>
      </clip>
    </item>
    </layer-list>

This drawable is used in theme to restyle the progress bar control:

    <style name="Theme.Custom" parent="android:Theme.Light">
      <item name="android:progressBarStyleHorizontal">@style/Widget.ProgressBar.Horizontal.Custom</item>
    </style>

    <style name="Widget.ProgressBar.Horizontal.Custom" parent="android:Widget.ProgressBar.Horizontal">
      <item name="android:background">@drawable/bg_inset_gray</item>
      <item name="android:progressDrawable">@drawable/progress_bar_horizontal</item>
      <item name="android:indeterminateDrawable">@drawable/progress_bar_indeterminate_horizontal</item>
    </style>

The idea is to make a diagonnally-striped progress bar which does not strerch, but grows in width as the operation progresses. That is why <clip> is used.

It works fine most of the time. However from time to time (without any chances to reproduce on purpose) it starts to stretch single tile of the drawable instead of clipping it appropriately.

The application is developed with android:minSdkVersion="7" and running on HTC Desire with Android 2.2.

Any help would be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文