2

このレイアウトで FloatingActionButton の android:src になるようにカスタム ドローアブルを設定したかったのです。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:sscce="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <android.support.design.widget.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        sscce:fabSize="normal"
        android:src="@drawable/fab_drawable" />

</LinearLayout>

私は次のようなものを期待していました:

ここに画像の説明を入力

しかし、私は得ました:

ここに画像の説明を入力

これはカスタム レイヤー リスト ドローアブルで、いくつかのシェイプ ドローアブルが含まれています。

res/drawable/fab_drawable.xml:

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

    <item>
        <shape android:shape="oval">
            <solid android:color="#1AFF00" /> <!-- green -->
            <size android:width="150dp"
                android:height="150dp"/>
        </shape>
    </item>



    <item>
        <shape android:shape="oval">
            <solid android:color="#FC00FF" /> <!-- pink -->
            <size android:width="100dp"
                android:height="100dp"/>
        </shape>
    </item>



    <item>
        <shape android:shape="oval">
            <solid android:color="#0040FF" /> <!-- blue -->
            <size android:width="40dp"
                android:height="40dp" />
        </shape>
    </item>



    <item>
        <shape android:shape="oval" >
            <stroke android:width="3dp"
                android:color="#FF0000"/> <!-- red -->

            <solid android:color="#FFBF00" /> <!-- yellow -->
            <size android:width="24dp"
                android:height="24dp" />
        </shape>
    </item>

</layer-list>
4

1 に答える 1

2

値を使用することは構文的に可能dpですが、これは一部の密度カテゴリで問題を引き起こすように思われるため、px代わりに使用することをお勧めします。いずれにせよ、形状のドローアブルは、含まれているものに合わせてスケーリングされます。指定Viewした値は、形状の比率に影響を与えるだけです。

Viewレイヤー リスト ドローアブルの場合、各レイヤーは他のレイヤーとは独立して収まるようにスケーリングされるため、すべてのシェイプ ドローアブルのサイズに共通の「フレーム」を提供する必要があります。

これは、小さい円には、エッジからどれだけ離れて描画するかについての追加情報が必要であることを意味します。コンテナの中心にある円の場合:

距離 = (コンテナのサイズ - 円のサイズ) / 2

すべてのドローアブルの基本サイズを採用する場合150px、たとえば、ピンクの円 (サイズ100px) は25pxコンテナーの端までの距離が必要です。

各 に属性を設定することで、この情報を提供できますitem

<item android:top="25px" android:left="25px" android:bottom="25px"  android:right="25px">
<shape android:shape="oval">
    <solid android:color="#FC00FF" /> <!-- pink -->
    <size android:width="100px"
          android:height="100px"/>
</shape>
</item>

上/左だけでなく、下/右にも属性を持つことが重要であることに注意してください。属性を省略した場合、ドローアブルはそれぞれのエッジに接するようにスケーリングされるため、円の形状は楕円形または中心から外れた円としてレンダリングできます。

于 2016-04-13T07:18:29.613 に答える