2011-12-02 16 views
7

以下のレイヤーリストを使用すると、私のスケール描画が決して表示されません。何故ですか?Androidレイヤーリストにはスケール可能なアイテムが表示されませんか?

menu_dialog_header.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
    <shape> 
     <solid android:color="@color/black"></solid> 
    </shape> 
    </item> 
    <item> 
    <scale 
     android:scaleHeight="50%" 
     android:scaleWidth="100%" 
     android:scaleGravity="top" 
     android:drawable="@drawable/shine" /> 
    </item> 
</layer-list> 

shine.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <solid android:color="@color/shine" /> 
</shape> 

menu_dialog.xml

<!-- header --> 
<LinearLayout 
    android:background="@drawable/menu_dialog_header" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal|center" 
    android:padding="8dp" 
    android:orientation="horizontal" > 
    ... 
+0

これを追跡できましたか? – Bostone

答えて

13

解決方法があります。<scale> の代わりに<inset>を試してみてください。あなたは<item>android:top/android:bottom/android:left/android:right<inset>のアンドロイドの組み合わせを使用することができます。insetXXXをサイズにイメージを

あなたがあなたの元画像の、各インセット値の相対的な設定の側面のようなものを行うことができます寸法。たとえば、64ピクセル幅の画像を50%カットする場合は、各面に(64/4 = 16)を割り当てることができます。

+1

私はこれが商品の一回の使用とどのように違うのか分かりません。あなたは例を挙げることができますか? –

+1

@ジョーあなた、私の友人は王様です!より一般的な仕組みを持たせるためにはプログラムで行う必要があったので、不変性の問題がありましたが、この挿入図はまさに私が必要としていたものです。 – AsafK

+1

面白い、ちょうどAndroidに戻って、私はこの質問を忘れてしまった。私は新しいプロジェクトでこのインセット回答を使用しています。なぜなら、それは2011年のオプション(v2.3)だったとは思わないからです。 – worked

7

そうではありません厳密にはレイヤリストの欠陥です。 ScaleDrawableは、Drawable ResourcesとScaleDrawableリファレンスの両方で(簡潔に)述べたように、のドロウアブルのレベルに依存します。

ScaleDrawableがどのようにレベルを解釈するかについての文書はないようです。

DrawableのレベルをXMLで設定する方法はないようです。これはScaleDrawableの主な使用例が描画可能なサイズをアニメーション化することを反映しています。したがって、コード内に描画可能レベルを設定する必要があります。

ここでScaleDrawableの使用方法を強く思い浮かべます。なぜなら、ドロワーブルを配置してサイズを定義できるため、より強力な方法でドロアブルを積み重ねることができるからです。