1

私はカスタムSeekBarを持っています:

<SeekBar 
   android:id="@+id/seekBar"
    android:layout_width="@dimen/seekbar_width"
    android:layout_height="wrap_content"
    android:paddingTop="15px"
    android:paddingBottom="15px"
    android:secondaryProgress="0"
    android:progress="0"
    style="@style/CustomSeekBar"/>

このスタイルで:

<style name="CustomSeekBar">
    <item name="android:layout_width">@dimen/seekbar_width</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:progressDrawable">@drawable/custom_seekbar_progress</item>
    <item name="android:thumb">@drawable/slider_bar_grip</item>
</style>

レイヤーリストを使用する場合は、2つのタイプを試しました。最初に9つのパッチ画像:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background"           android:drawable="@drawable/slider_bar_track"></item>
    <item android:id="@android:id/secondaryProgress"    android:drawable="@drawable/slider_bar_track"></item>
    <item android:id="@android:id/progress"             android:drawable="@drawable/slider_bar_hlt"  ></item>
</layer-list>

次に、アイテムとグラデーションを使用します。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <shape>
            <corners android:bottomLeftRadius="4px" android:topLeftRadius="4px" android:topRightRadius="4px" android:bottomRightRadius="4px"/>
            <gradient android:startColor="@color/dark_grey" android:endColor="@color/light_grey" android:angle="-90.0" />
        </shape>
    </item>
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:bottomLeftRadius="4px" android:topLeftRadius="4px" android:topRightRadius="4px" android:bottomRightRadius="4px"/>
            <gradient android:startColor="@color/dark_grey" android:endColor="@color/light_grey" android:angle="-90.0" />
            </shape>
        </clip>
    </item>
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:bottomLeftRadius="4px" android:topLeftRadius="4px" android:topRightRadius="4px" android:bottomRightRadius="4px"/>
                <gradient android:startColor="@color/orange" android:endColor="@color/orange" android:centerColor="@color/light_orange" android:angle="90.0" />
            </shape>
        </clip>
    </item>
</layer-list>

これはどのように見えるべきかです:ここに画像の説明を入力してください

画像の場合は次のようになります。ここに画像の説明を入力してください 高さが高すぎます(進行状況、背景、親指のpngはすべて12ピクセルの高さですが、背景と進行状況のpngの上下に透明なピクセルがあり、同じ高さになっています)ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してくださいIこれらの3つのファイルを、同じサイズのすべての密度のresフォルダーに配置します(私が望むように)。また、進行状況は常にSeekBarの幅全体に広がります。レイヤーリストの順序を変更しようとしましたが、役に立ちませんでした。

レイヤーリストのシェイプを使用すると、次のようになります。ここに画像の説明を入力してください 少なくとも、進行状況は正しいですが、高さが高すぎます。

この場合、すべての密度で同じ高さ(dpではなく12px)である必要があります。スクリーンショットはxhdpiデバイスからのものです。プログレスドローアブルの高さは、mdpiデバイスのサムと同じです。どうすればそれらをすべてのデバイスで同じように見せ、プログレスドローアブルを親指よりも小さくすることができますか?

4

1 に答える 1

2

問題は、進行状況と背景のpngの左側の境界に定義されたストレッチ可能な領域です。

伸縮可能な領域は、現在、左端のちょうど真ん中に1ピクセル幅のようなものです。これは、pngの水平方向の中心線が引き伸ばされることを意味します。しかし、必要なのは「透明な領域を伸ばす」ことです。

それをしなさい:

  • 左端の中央にある黒いピクセルを削除します。
  • 左端の約y=3とy=9に2つの黒いピクセルを追加します(両方がpngの透明な領域にあることを確認してください)
于 2013-02-17T21:19:30.357 に答える