17

カスタム プログレス バー ( の下に配置WebView) を作成しています。描画したいのは、WebViewと の間の 1 dp 幅の線ProgressBarです。既存のドローアブル、つまりprogress_horizontal.xmlを変更して、次のようなことを試しました。

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

  (...)

  <item>
    <shape android:shape="line">
      <stroke android:width="1dp" android:color="#FF000000" />
    </shape>
  </item>

</layer-list>

ただし、この線は垂直方向に中央揃えになっていますが、drawable の上に描画したいと考えています。私が思いつくことができる唯一のアイデアは、以下のこの「ハック」グラデーションを使用することです:

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

  (...)

  <item>
    <shape>
      <gradient
          android:startColor="#FF000000"
          android:centerColor="#00000000"
          android:centerY="0.01"
          android:endColor="#00000000"
          android:angle="270"
      />
    </shape>
  </item>

</layer-list>

で定義されたドローアブルの上部に合わせて単一の線形状を描画する方法について、より良いアイデアはありlayer-listますか?

4

4 に答える 4

47

私もこれを理解しようとしてしばらく時間を費やしました。うまくいけば、それを行うためのより良い方法がありますが、これは私が使用した方法です。

レイヤー リストの最初のアイテムは、境界線にしたい色のソリッドにする必要があります。それに続いて、ボーダーを配置したい側にパディングを付けて、ボーダーを配置したいものになります。

例えば:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="YOUR BORDER COLOR" />
        </shape>
    </item>
    <item android:top="YOUR TOP BORDER THICKNESS">
        THE THING YOU WANT A BORDER ON
    </item>
</layer-list>

アイデアは、アイテムのパディングがその後ろの固体形状を明らかにし、ボーダーの外観を与えるということです. ボーダーを追加するために、任意の側にパディングを追加できます。このように、より複雑になり、さまざまな色の境界線を持つこともできると思います。

ハックのように思えますが、私にとってはうまくいきました。

編集:「パディング」と言いましたが、レイヤーリストではオフセットのようなものです。

于 2010-10-24T16:36:14.137 に答える
12

関連するすべてのトピックを調べましたが、誰も私の問題を解決できませんでした。しかし、それらのいくつかは、レイヤーリストまたは形状パラメーターがどのように機能するかを理解するのに非常に役立ちました.

私の問題は、線形グラデーションでボタンを定義し、上下の線を異なる色で描くことでした。結局、私はこのソリューションをハッキングしました。res/drawable/blue_btn.xml の下にファイルを保存しました

    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
   <item android:state_pressed="true" >        
        <shape android:shape="rectangle">
            <solid android:color="@color/blue_end" />
            <padding 
                   android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
            <stroke   
                android:width="1dp"
                android:color="@color/bottomline_btn" />                        
        </shape>    
    </item>
    <item>
        <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
           <item>
                <shape android:shape="rectangle">
                    <solid android:color="@color/blue" />
                    <gradient
                        android:startColor="@color/blue"
                        android:endColor="@color/blue_end"
                        android:angle="270" />
                </shape>
            </item>
            <item android:top="0dp" android:bottom="-1dp" android:left="-1dp" android:right="-1dp">
                <shape android:shape="rectangle">
                    <stroke   
                        android:width="1dp"
                        android:color="@color/topline_btn" />                       
                    <solid android:color="#00000000" />
                    <corners android:radius="0dp" />
                </shape>
            </item>
            <item android:top="-1dp" android:bottom="0dp" android:left="-1dp" android:right="-1dp">
                <shape android:shape="rectangle">
                    <stroke   
                        android:width="1dp"
                        android:color="@color/bottomline_btn" />                        
                    <solid android:color="#00000000" />
                    <corners android:radius="0dp" />
                </shape>
            </item>         
        </layer-list>
    </item>  
</selector>


<color name="topline_btn">#31ffffff</color>
<color name="bottomline_btn">#31000000</color>

<color name="blue">#449def</color>
<color name="blue_end">#2f6699</color>
于 2012-05-31T14:00:25.970 に答える
1

このようなもので相殺しようとしましたか

http://android.amberfog.com/?p=9

于 2010-04-27T07:47:21.350 に答える
0

私の解決策は、最後のレイヤーアイテムとして9パッチを追加することです:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape>
            <solid android:color="@color/tab_button_active_layer2" />
        </shape>
    </item>
    <item android:bottom="@dimen/tab_button_active_bottom_bar_width">
        <shape>
            <solid android:color="@color/tab_button_active_layer1" />
        </shape>
    </item>
    <!-- 9-patch drawable -->
    <item android:drawable="@drawable/tab_button_border_top"/>
</layer-list>
于 2014-02-24T21:40:01.067 に答える