В написанном вами коде есть пара ошибок:
- Вы объявили переменную
textSize
как int
. Таким образом, ваша попытка увеличить значение на 0,1 на каждой итерации бесполезна, потому что значение возвращается к int после каждой операции, отбрасывая только что добавленное вами значение (то есть 25 + = 0,1 -> 25,1, возвращая к int - > 25 ... пена, промыть повторить) Таким образом, значение, которое вы передаете setTextSize()
, фактически никогда не меняется.
- Ваш код не повторяется. Этот цикл будет выполняться только один раз, пока значение не достигнет 50, а затем остановится. Вы не получите желаемого эффекта «назад / вперед».
- Ваши обновления пользовательского интерфейса должны ВСЕГДА происходить в основном потоке / рендеринге. Вы никогда не должны вызывать какие-либо методы обновления (например,
setTextSize()
) из любого потока, который вы создали. Эту проблему можно решить, используя Handler
для управления потоками за вас.
Если вы хотите анимировать кнопку целиком, вы можете посмотреть на структуру анимации, как предлагали другие. Однако, чтобы автоматизировать просто размер текста, вы на правильном пути ... нам просто нужно настроить ваш код, основываясь на пунктах, которые я упомянул выше:
Handler mHandler = new Handler();
boolean mReverse = false;
Runnable mUpdate = new Runnable() {
@Override
public void run() {
float current = playBtn.getTextSize();
if(mReverse) {
current -= 0.1;
playBtn.setTextSize(current);
mReverse = (current <= 25);
} else {
current += 0.1;
playBtn.setTextSize(current);
mReverse = (current >= 50);
}
mHandler.postDelayed(mUpdate, 100);
}
}
Handler
создается в основном потоке, а весь код внутри Runnable
выполняется в основном потоке ... так что вы можете обновить там пользовательский интерфейс. postDelayed()
заботится о задержках ожидания, поэтому вам вообще не нужно создавать другой поток. Чтобы начать анимацию, просто позвоните
mHandler.postDelayed(mUpdate, 100);
в любом месте вашего кода. Чтобы остановить анимацию в любое время, просто прекратите вызывать postDelayed
после каждой итерации.
НТН!