Рубрики
Без рубрики

Как создать анимацию пульсации для смены темы в Android?

Недавно я опубликовал библиотеку на GitHub, которая создает пользовательские темы и изменяет их… С тегами android, java, kotlin, библиотека.

Недавно я опубликовал библиотеку на 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”