@iBadCoder

Как добавить padding в drawable?

Использовал draweble для создания таких кнопок:
5e7e5c28e43c4084365180.jpeg

Однако столкнулся с такой неприятностью, эффект 3д кнопки портится из-за того, что текст своего положения не меняет.
spoiler
5e7e5c8fc62aa673270435.jpeg
Можно ли как-то установить padding для текста из draweble?
Чтобы изначально padding bottom был например 5, а при нажатии он становился 0?
  • Вопрос задан
  • 29 просмотров
Решения вопроса 1
@iBadCoder Автор вопроса
Решил проблему следующим образом:
Создал drawable для кнопки и поставил его как background.
Создал класс "Button3D", унаследовал его от AppCompatButton.
Переопределил метод onTouchEvent
init {
        this.setPadding(0,0,0,5) //Изночально padding должен быть
    }

    override fun onTouchEvent(event: MotionEvent?): Boolean {
        when(event?.action){
            MotionEvent.ACTION_DOWN -> this.setPadding(0,0,0,0) //При нажатии убераем padding
            MotionEvent.ACTION_UP -> this.setPadding(0,0,0,5) //Для не нажатой кнопки ставим padding
        }
        return super.onTouchEvent(event)
    }


Класс Button3D

import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent

class Button3D: androidx.appcompat.widget.AppCompatButton{

    constructor(context: Context, attrs: AttributeSet): super(context, attrs)

    init {
        this.setPadding(0,0,0,5) //Изночально padding должен быть
    }

    override fun onTouchEvent(event: MotionEvent?): Boolean {
        when(event?.action){
            MotionEvent.ACTION_DOWN -> this.setPadding(0,0,0,0) //При нажатии убераем padding
            MotionEvent.ACTION_UP -> this.setPadding(0,0,0,5) //Для не нажатой кнопки ставим padding
        }
        return super.onTouchEvent(event)
    }
}


Drawable

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="false">
        <layer-list>
            <item>
                <shape>
                    <corners android:radius="15dp" />
                    <solid android:color="@color/colorAccentDark"/>
                </shape>
            </item>
            <item android:bottom="5dp" android:gravity="center">
                <shape>
                    <corners android:radius="15dp" />
                    <solid android:color="@color/colorAccent" />
                </shape>
            </item>
        </layer-list>
    </item>

    <item android:top="5dp" android:state_pressed="true">
        <shape>
            <corners android:radius="15dp" />
            <solid android:color="@color/colorAccent"/>
        </shape>
    </item>
    
</selector>


Не нажатая кнопка

5e7f15a0cf4a4484238882.jpeg

Нажатая кнопка

5e7f15ae79aa6234378486.jpeg
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ДомКлик Москва
от 120 000 до 260 000 ₽
Drum Pads 24 Ульяновск
от 90 000 до 160 000 ₽
C.Nord Санкт-Петербург
от 100 000 ₽
26 мая 2020, в 10:43
2000 руб./за проект
26 мая 2020, в 10:39
3333 руб./за проект
26 мая 2020, в 10:38
20000 руб./за проект