Нужно центрировать ImageButton src, а не растягивать его, чтобы он соответствовал размеру кнопки

Я учусь разрабатывать пользовательские интерфейсы Android. Я хочу создать ImageButton с набором рисунков для указания различных состояний кнопок. Я создал две картинки для каждой кнопки: 133 dp для нормального состояния и масштабированную копию (126 dp) для создания эффекта нажатой кнопки.

введите здесь описание изображения

Я нарисовал вторую картинку, чтобы показать, что механизм выбора изображения работает по крайней мере.

Вот начальное состояние моего приложения

введите здесь описание изображения

Когда я нажимаю кнопку, она меняет только цвет, но не размер, как ожидалось. Оба изображения подогнаны под один и тот же размер

введите здесь описание изображения

XML макет активности:

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainUserActions"
    android:background="@android:color/transparent">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:weightSum="3"
        android:layout_alignParentTop="true">

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:weightSum="2"
            android:gravity="top">

            <ImageButton
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/imageButton"
                android:clickable="true"
                android:layout_weight="1"
                android:src="@drawable/broom_stick_image_selection"
                android:background="@null"
                android:layout_gravity="center"
                android:scaleType="center" />

            <ImageButton
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/imageButton2"
                android:layout_gravity="center"
                android:clickable="true"
                android:layout_weight="1"
                android:background="@null"
                android:src="@drawable/vacuum_selection"
                android:scaleType="center" />
        </LinearLayout>

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center_horizontal"
            android:layout_weight="1"></LinearLayout>

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center_horizontal"
            android:layout_weight="1"></LinearLayout>
    </LinearLayout>
</RelativeLayout>

выбираемый выбор xml:

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true"
           android:drawable="@drawable/broom_stick_white_pressed_rose" /> <!-- pressed -->
     <item android:state_focused="true"
           android:drawable="@drawable/broom_stick_white" /> <!-- focused -->
     <item android:drawable="@drawable/broom_stick_white" /> <!-- default -->
 </selector>

Как сообщить системе, что изображения src просто центрируются на макете кнопки, а не подгоняются под один и тот же размер?


person Yury Rudakou    schedule 19.04.2016    source источник
comment
Попробуйте установить ширину и высоту ImageButtons на wrap_content.   -  person NoChinDeluxe    schedule 20.04.2016


Ответы (1)


Один из способов добиться этого — заключить элемент в layer-list, что позволяет определить смещения.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <layer-list>
            <item
                android:drawable="@drawable/broom_stick_white_pressed_rose"
                android:top="2dp"
                android:right="2dp"
                android:bottom="2dp"
                android:left="2dp" />
        </layer-list>
    </item>
    <item android:drawable="@drawable/broom_stick_white" />
</selector>
person tachyonflux    schedule 19.04.2016
comment
Теперь я вижу, что дополнительные изображения не нужны - достаточно исходного изображения! - person Yury Rudakou; 21.04.2016