Android 3D按钮src填充

时间:2014-01-12 19:16:20

标签: android android-layout android-button

button

在屏幕截图中,您可以看到src图像位于两个州的​​相同位置。

我希望在按下状态下移动图像。

布局

<ImageButton
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/my_button"
    android:src="@drawable/image" />

my_button.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" >
        <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
            <!-- Top 1dp Shadow -->
            <item>
                <shape android:shape="rectangle">
                    <solid android:color="#248349" />
                    <corners android:radius="7dp" />
                </shape>
            </item>
            <!-- Light bottom color -->
            <item android:top="1dp">
                <shape android:shape="rectangle">
                    <solid android:color="#2AB564" />
                    <corners android:radius="7dp" />
                    <stroke android:width="1px" android:color="#248349"/>
                    <padding
                        android:top="28dp"
                        android:bottom="36dp" />
                </shape>
            </item>
        </layer-list>
    </item> 
    <item>
        <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
            <!-- Bottom 3dp Shadow -->
            <item>
                <shape android:shape="rectangle">
                    <solid android:color="#22A863" />
                    <corners android:radius="7dp" />
                </shape>
            </item>
            <!-- Light top color -->
            <item android:bottom="3dp">
                <shape android:shape="rectangle">
                    <solid android:color="#2DCC70" />
                    <corners android:radius="7dp" />
                    <stroke android:width="1px" android:color="#22A863"/>
                    <padding
                        android:top="36dp"
                        android:bottom="28dp" />
                </shape>
            </item>
        </layer-list>
    </item>
</selector>

正如您所看到的,我尝试设置填充android:top="36dp" android:bottom="28dp"和压缩状态android:top="28dp" android:bottom="36dp",但与没有填充相同:/

1 个答案:

答案 0 :(得分:2)

您需要做的是更改图像可绘制而不是背景。您可以为它创建一个选择器,并根据其按下状态为其分配自定义重力:

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" >
        <bitmap
            android:src="@drawable/image"
            android:gravity="bottom|center_vertical" />
    </item>
    <item>
        <bitmap
            android:src="@drawable/image"
            android:gravity="center" />
    </item>
</selector>

scaletype的{​​{1}}设置为ImageButton,为其指定最小宽度和高度,然后从背景中删除或修改填充,它应该可以正常工作。