繁体   English   中英

Android:自定义seekbar进度可绘制对象呈现不正确

[英]Android: Custom seekbar progress drawable is rendered incorrectly

我打算制作一个自定义的搜索栏,并为背景和进度可绘制对象设置自己的图像。 我已经制作了2张9补丁图像,每张分别用于背景和进度可绘制对象。 这是我用于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>

另外,这是我的seekbar的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>

问题在于,可绘制对象的进度部分绘制在背景部分下方,而不是直接重叠在背景部分之下。

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

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

在经历了几十个自定义搜寻栏教程之后,我仍然停留在我可能在这里做错的事情上。 这可能是非常琐碎的,但我只是无法发现它。

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

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

2)在层列表中,项目的填充会堆叠起来。 这意味着,如果图层列表中的第一个项目具有某些填充,则该填充将加总其后所有项目的填充,第二个项目的填充将总计其下所有项目的填充,依此类推。

因此,在我的情况下,用作seekBar背景的9补丁图像(图层列表中的第一项)得到了一些意外填充(因为将拉伸线用作了填充线),而seekBar进度可绘制对象将此填充添加到了它的填充中。自己的意外填充(再次,因为它是9补丁),导致其显示在背景下方。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM