Недавно я опубликовал библиотеку на GitHub, которая создает пользовательские темы и динамически изменяет их с помощью анимации пульсации. Я буду признателен, если вы просмотрите его и пришлете мне свои ценные мнения и запросы в качестве участника.
Демонстрация:
Моя библиотека на Github:
Моя библиотека на Github:
Особенности:
- поддержка java и котлин проекты.
- сменить тему без отдыха занятий и фрагментов.
- поддержка приложений с несколькими фрагментами.
- анимация пульсаций.
- обратная анимация .
- изменяемая продолжительность анимации.
- изменяемая позиция анимации.
- прослушиватель анимации.
- наблюдайте за изменениями тем для пользовательских действий с живыми данными.
- простота в использовании, 5 или 7 крошечных шагов.
- поддержка любых API-интерфейсов Android (анимация работает на API>20).
Как установить?
Добавьте следующую строку в файл уровня приложения build.gradle в области зависимостей:
dependencies { ... implementation "io.github.imandolatkia:animatedThemeManager:1.1.2" }
Как использовать?
1 – Создайте абстрактный класс, который наследуется от Темы приложения . В этом классе создайте абстрактные методы для возврата соответствующего цвета для всех элементов пользовательского интерфейса, которые вы хотите изменить в каждой теме. Например, если вы хотите изменить цвет фона, цвета текста и цвета значков в вашем первое упражнение , выполните следующие действия:
interface MyAppTheme : AppTheme { fun firstActivityBackgroundColor(context: Context): Int fun firstActivityTextColor(context: Context): Int fun firstActivityIconColor(context: Context): Int // any other methods for other elements }
2 – Для каждой темы, которую вы хотите использовать в своем приложении, создайте класс, который расширяется от класса, созданного на шаге 1 (MyAppTheme) , и реализуйте методы с соответствующими цветами или ресурсами, например, если вы хотите иметь 3 темы, вы должны создать 3 класса и реализовать методы:
class LightTheme : MyAppTheme { override fun id(): Int { // set unique iD for each theme return 0 } override fun firstActivityBackgroundColor(context: Context): Int { return ContextCompat.getColor(context, R.color.background_light) } override fun firstActivityTextColor(context: Context): Int { return ContextCompat.getColor(context, R.color.text_light) } override fun firstActivityIconColor(context: Context): Int { return ContextCompat.getColor(context, R.color.icon_light) } ... } class NightTheme : MyAppTheme {...} class PinkTheme : MyAppTheme {...}
3- Расширьте свою активность с Тематической активности :
MainActivity : ThemeActivity() { ... }
4 – Реализовать тематическую деятельность 2 абстрактных метода :
// to sync ui with selected theme override fun syncTheme(appTheme: AppTheme) { // change ui colors with new appThem here val myAppTheme = appTheme as MyAppTheme // set background color binder.root.setBackgroundColor(myAppTheme.firstActivityBackgroundColor(this)) //set text color binder.text.setTextColor(myAppTheme.activityTextColor(this)) // set icons color binder.share.setColorFilter(myAppTheme.firstActivityIconColor(this)) binder.gift.setColorFilter(myAppTheme.firstActivityIconColor(this)) ... } // to get the start theme override fun getStartTheme(): AppTheme { return LightTheme() }
5- Измените тему с помощью метода ThemeManager.instance.change Theme():
// set change theme click listener binder.lightButton.setOnClickListener { ThemeManager.instance.changeTheme(LightTheme(), it) }
Первый аргумент – это выбранная тема.
Второй аргумент – это мнение о том, что анимация начинается с ее центра.
Как использовать в приложении с несколькими фрагментами?
Повторите все предыдущие 5 шагов, а затем:
6- Расширьте свои фрагменты из Фрагмент темы :
MyFragment : ThemeFragment() { ... }
7- Реализовать Фрагмент темы синхронизировать абстрактные методы темы :
// to sync ui with selected theme override fun syncTheme(appTheme: AppTheme) { // change ui colors with new appThem here ... }
Некоторые другие настройки и настройки:
✔️ обратная анимация
Если вы хотите использовать обратную анимацию, вызовите функцию reverse Change Theme() вместо функции change Theme().:
binder.lightButton.setOnClickListener { ThemeManager.instance.reverseChangeTheme(LightTheme(), it) }
✔️ изменить продолжительность анимации
Если вы хотите изменить продолжительность анимации, добавьте желаемую продолжительность в миллисекундах в качестве третьего аргумента ThemeManager.instance.changeTheme(). Значение по умолчанию равно 600:
binder.lightButton.setOnClickListener { ThemeManager.instance.changeTheme(LightTheme(), it, 800) }
✔️ изменить положение центра анимации
Если вы хотите запустить анимацию где-то еще, кроме вида, который щелкнул, отправьте объект координат вместо представления в ThemeManager.instance.changeTheme()
binder.lightButton.setOnClickListener { binder.nightButton.setOnClickListener { ThemeManager.instance.changeTheme(NightTheme(), Coordinate(10, 20) } }
с помощью координаты:
Coordinate(var x: Int, var y: Int)
✔️ наблюдайте за изменениями тем самостоятельно
Если вы хотите наблюдать за изменениями тем и выполнять какие-либо пользовательские действия, вы можете использовать живые данные темы в любом фрагменте или действии:
ThemeManager.instance.getCurrentLiveTheme().observe(this) { Toast.makeText(this, "on Theme changed to ${it.id()}", Toast.LENGTH_SHORT).show() }
✔️ установить прослушиватель анимации
Если вы хотите установить прослушиватель анимации, используйте метод setTheme AnimationListener() в своем действии
setThemeAnimationListener(MyThemeAnimationListener(this))
с помощью анимации MyTheme Слушатель:
class MyThemeAnimationListener(var context: Context) : ThemeAnimationListener{ override fun onAnimationStart(animation: Animator) { Toast.makeText(context, "onAnimationStart", Toast.LENGTH_SHORT).show() } override fun onAnimationEnd(animation: Animator) { Toast.makeText(context, "onAnimationEnd", Toast.LENGTH_SHORT).show() } override fun onAnimationCancel(animation: Animator) { Toast.makeText(context, "onAnimationCancel", Toast.LENGTH_SHORT).show() } override fun onAnimationRepeat(animation: Animator) { Toast.makeText(context, "onAnimationRepeat", Toast.LENGTH_SHORT).show() } }
Оригинал: “https://dev.to/imandolatkia/how-to-create-ripple-animation-for-changing-theme-in-android-419h”