2

背景と進行状況のドローアブル用に独自の画像セットを使用して、カスタム シークバーを作成するつもりです。背景とプログレス ドローアブル用に 1 つずつ、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>

また、ここに私のシークバーの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 )

何十回ものカスタム シークバー チュートリアルを行ってきましたが、ここで間違っている可能性があることにまだ行き詰まっています。それは非常に些細なことかもしれませんが、私はそれを見つけることができません。

4

1 に答える 1

0

ここでいくつかのことが行われていることがわかりました。

1) seekBar の背景と進行状況のドローアブルに 9 パッチ イメージを使用しました。しかし、9 パッチ画像には、上端と左端のストレッチ ラインとは別に、右端と下端のパディング ラインもあるとは知りませんでした。これらは画像のコンテンツ領域を定義し、残った領域は自動的にパディング領域になります (つまり、非コンテンツ領域は、この画像が背景として使用されるビューのパディングにカウントされます)。また、パディング ラインが指定されていない場合、Android はストレッチ ラインをパディング ラインとして使用します。

2) レイヤーリストでは、アイテムのパディングが積み重なっていきます。つまり、レイヤー リストの最初のアイテムにパディングがある場合、このパディングはその後のすべてのアイテムのパディングに加算され、2 番目のアイテムのパディングはその下のすべてのアイテムのパディングに加算されます。

したがって、私の場合、seekBar の背景 (レイヤー リストの最初の項目) として使用される 9 パッチの画像に意図しないパディングがあり (ストレッチ ラインがパディング ラインとして使用されていたため)、seekBar の進行状況ドローアブルにこのパディングが追加されました。背景の下に表示される原因となった独自の意図しないパディング (これも 9 パッチであるため)。

これを修正するために、9 パッチ画像を変更し、パディング ラインを完全な長さに設定しました。つまり、画像全体をコンテンツ領域として定義しました。パディングを行うと、プログレス ドローアブルのパディングが 2 倍になり、意図した位置 (バックグラウンド ドローアブルのちょうど上) からずれてしまうため、他に選択肢はありませんでした。

于 2013-08-29T21:43:48.213 に答える