【问题标题】:Android: Custom seekbar progress drawable is rendered incorrectlyAndroid:自定义搜索栏进度可绘制不正确
【发布时间】:2013-08-30 05:43:48
【问题描述】:

我打算制作一个自定义搜索栏,用我自己的一组图像作为背景和进度可绘制对象。我制作了 2 个 9-patch 图像,每个用于背景和进度可绘制对象。这是我用于progressDrawable的代码:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:id="@+id/background"
        android:drawable="@drawable/experience_seekbar_background" />

    <item android:id="@+id/progress">
        <clip
            android:clipOrientation="horizontal"
            android:gravity="left|top"
            android:drawable="@drawable/experience_seekbar_progress" />
    </item>
</layer-list>

另外,这里是我的搜索栏的 xml 定义:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="5dp" >

    <SeekBar
        android:id="@+id/experienceSeekBar"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:max="2"
        android:progress="1"
        android:progressDrawable="@drawable/experience_seekbar" />
</LinearLayout>

问题是,drawable的进度部分绘制在背景部分下方,而不是直接重叠。

预期/期望:(http://i.imgur.com/C27dQZK.png)

实际输出:(http://i.imgur.com/ftNlMMI.png)

阅读了数十个自定义搜索栏教程后,我仍然不知道我在这里可能做错了什么。这可能是非常微不足道的事情,但我无法发现它。

【问题讨论】:

    标签: android custom-controls drawable seekbar


    【解决方案1】:

    事实证明这里有几件事在起作用。

    1) 我使用 9-patch 图像作为 seekBar 背景和进度可绘制对象。但是,我不知道 9-patch 图像除了顶部和左侧边缘的拉伸线外,还有右侧和底部边缘的填充线。这些定义了图像的内容区域,左侧区域自动成为填充区域(即非内容区域计入该图像将用作背景的视图的填充)。此外,如果没有指定填充线,android 使用拉伸线作为填充线。

    2) 在层列表中,项目的填充堆叠起来。这意味着,如果 layer-list 中的第一项有一些内边距,则此内边距将累加到它之后的所有项目的内边距,第二项的内边距加起来是它下面所有项目的内边距,依此类推。

    所以在我的例子中,用作 seekBar 背景的 9-patch 图像(图层列表中的第一项)得到了一些意想不到的填充(因为拉伸线被用作填充线),而 seekBar 进度可绘制得到了这个填充添加到它自己的非预期填充(同样,因为它是一个 9 补丁),导致它显示在背景下方。

    为了纠正这个问题,我更改了 9-patch 图像并将填充线设置为它们的全长,即我将整个图像定义为内容区域。没有其他选择,因为任何填充都会导致进度可绘制对象的填充增加两倍,从而将其从预期位置(恰好在背景可绘制对象上方)移位。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-08
      相关资源
      最近更新 更多