Вот как я бы это сделал, он не идеален, но он должен работать для всех типов анимации, которые вы упомянули выше.
Сначала создайте класс с именем AnimStep , который содержитдва поля: время и цвет .Конструктор - AnimStep (int time, String color)
Затем создайте класс с именем AnimSequence , который содержит массив объектов AnimStep.Вы получаете определенный шаг с помощью this.getStep (index).
Например, AnimSequence для «розовых 2 секунд, затем пурпурных 3 секунд, затем черных навсегда» будет содержать следующий массив AnimSteps: {новый AnimStep (0, "розовый"), новый AnimStep (2, "пурпурный"), новый AnimStep (5, "черный")}
Затем создайте класс с именем Animation , который выполняетсяпостоянно в отдельном потоке и регулярно просыпается (например, каждые 100 мс).Этот класс имеет три поля:
- sequence : указатель на объект AnimSequence
- startTime : отметка времени
- step : целое число, представляющее индекс элемента в массиве AnimStep
Когда вы нажимаете кнопку, вы передаете AnimSequence в Animation.Это устанавливает this.sequence для данного AnimSequence, this.startTime =, this.step = 1. Он также устанавливает цвет текста на цвет вашего первого AnimStep в AnimSequence.
Теперь каждый раз, когда анимацияпросыпается, делает следующее:
if (this.step >= this.sequence.size()) return // do nothing
currentStep = this.sequence.getStep(this.step)
elapsedTime = <current time stamp for now> - this.time
if (elapsedTime >= currentStep.time) {
this.step++
yourtext.color = currentStep.color
}