Не так давно Google выпустила очередное мажорное обновление своей операционной системы под названием Android. Сначала его можно было наблюдать под кодовым названием Android L, но к моменту релиза ОС получила название Android 5. Но не это важно. Для данной заметки важно то, что изменилась концепция дизайна всей ОС. Появилось такое понятие как Material Design.
Material Design - новая концепция, которая использовалась при построении визуального интерфейса всей ОС. Вышло неплохо, по моему мнению. Можно бесконечно обсуждать и размышлять о том, как двигалась мысль и фантазия дизайнеров при создании интерфейсов. Но сегодня я бы хотел опустить все эти обсуждения, а поговорить конкретно и по теме.
В стандартных интерфейсах ОС в приложениях имеется возможность использовать Action Bar - панель вверху окна приложения, а также боковой навигационной шторки (Navigation Drawer). Action Bar может содержать иконку приложения, навигационные элементы, какие-то управляющие действия и т.д. В Android 5 несколько изменился внешний вид Home кнопки в Action Bar: появилась анимация. Кнопка может менять свой внешний вид из трех параллельных горизонтальных линий в стрелку. А раз появилась анимация, то захотелось использовать её в своих целях. Мне потребовалось менять состояние кнопки при наступлении определённых событий в моём приложении.
Ниже предлагается решение этой проблемы. Решение, которое я нашел на просторах сети:
public void morphUpButtonToArrow() { ValueAnimator anim = ValueAnimator.ofFloat(0, 1); anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { float slideOffset = (Float) valueAnimator.getAnimatedValue(); mDrawerToggle.onDrawerSlide(mDrawerLayout, slideOffset); } }); anim.setInterpolator(new DecelerateInterpolator()); anim.setDuration(300); anim.start(); }
Обратная анимация абсолютно идентична и отличается только одной первой строчкой метода
public void morphUpButtonToList() { ValueAnimator anim = ValueAnimator.ofFloat(1, 0);