Я провел один день, играл с различной реализацией. Так что мое мнение, лучший способ сделать это, чтобы скопировать папку DrawerArrowDrawable из библиотеки AppCompat v7.
https://gist.github.com/IstiN/5d542355935fd7f0f357 - посмотрите на код с некоторой оптимизации
, чем вы можете использовать его в своей основной деятельности с кодом ниже
DrawerArrowDrawable drawable = new DrawerArrowDrawable(this, this);
ImageView menuButton = (ImageView) findViewById(R.id.arrow);
menuButton.setImageDrawable(drawable);
menuButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((DrawerLayout)findViewById(R.id.drawer)).openDrawer(Gravity.START);
}
});
при запуске нового фрагмента, вам нужно создать еще один посмотреть на то же место и добавить второй код в ваш фрагмент
private DrawerArrowDrawable mArrowDrawable;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mArrowDrawable = new DrawerArrowDrawable(getActivity(), getActivity());
ImageView topButton = (ImageView) view.findViewById(R.id.arrow);
topButton.setImageDrawable(mArrowDrawable);
topButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
closeSearch();
}
});
//run animation from hamburger to arrow
animate(0, 1, null);
....
private void animate(int startValue, int endvalue, Animator.AnimatorListener listener) {
ValueAnimator anim = ValueAnimator.ofFloat(startValue, endvalue);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float slideOffset = (Float) valueAnimator.getAnimatedValue();
mArrowDrawable.setProgress(slideOffset);
}
});
anim.setInterpolator(new DecelerateInterpolator());
anim.setDuration(300);
if (listener != null) {
anim.addListener(listener);
}
anim.start();
}
сделать анимацию из стрелки, чтобы гамбургер обрабатывать кнопку назад и выполнить код
animate(1, 0, null);
Вы также должны ждать в своем фрагменте, пока анимация не закончится, но это еще вопросы.
Если у вас есть вопросы, задайте вопросы.
Вы можете поделиться тем, что вы пробовали? – Bacs
Вы можете изменить тему во время выполнения, только если вы делаете это до 'setContentView()' – pdegand59
, вы можете изменить цвет только в том случае, если вы используете настраиваемое представление для панели действий. – Martin