programar - regresar al menu principal en android studio
Animar el icono del cajón en la flecha en setDisplayHomeAsUpEnabled? (3)
Estoy usando setDisplayHomeAsUpEnabled para mostrar la flecha en lugar del icono "hamburguesa" del cajón, pero no se está animando ni nada. En su lugar, muestra la flecha dibujable instantáneamente.
Pantalla de inicio: (Album 1)
Cuando tocas una película: (Álbum 2)
La cosa es que el icono hace la animación muy bien cuando deslizo el cajón, lo que me hace pensar que tal vez no debo usar setDisplayHomeAsUpEnabled para esto: (Álbum 3)
Álbum: http://imgur.com/a/LkXbh
Aquí está mi código de alternar cajón:
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
drawerAdapter = new DrawerAdapter(this, App.getNavItems(), getSupportFragmentManager());
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerList = (ExpandableListView) findViewById(R.id.left_drawer);
// Set onGroupClick and onChildClick
drawerAdapter.setClickEvents(MainActivity.this, drawerLayout, drawerList);
drawerList.setAdapter(drawerAdapter);
ActionBarDrawerToggle toolbarDrawerToggle = new ActionBarDrawerToggle(
this,
drawerLayout,
toolbar,
R.string.drawer_open,
R.string.drawer_close
) {
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
invalidateOptionsMenu();
}
public void onDrawerOpened(View view) {
super.onDrawerOpened(view);
invalidateOptionsMenu();
}
};
drawerLayout.setDrawerListener(toolbarDrawerToggle);
toolbarDrawerToggle.syncState();
EDITAR: Quiero que la animación no abra el cajón, eso ya funciona. Me gustaría activar manualmente la animación cuando carga un fragmento específico. Puede que no me haya explicado correctamente.
Desde que se hizo la pregunta, una forma alternativa ha estado disponible. La flecha animada es implementada por la clase ahora pública DrawerArrowDrawable
que implementa Drawable
.
En su código, configure el ícono de navegación de la siguiente manera:
DrawerArrowDrawable drawerArrow = new DrawerArrowDrawable(this);
drawerArrow.setColor(myColor);
toolbar.setNavigationIcon(drawerArrow);
Registre un OnBackStackChangedListener
y anime la flecha manualmente:
@Override
public void onBackStackChanged() {
boolean drawer = getSupportFragmentManager().getBackStackEntryCount() == 0;
ObjectAnimator.ofFloat(drawerArrow, "progress", drawer ? 0 : 1).start();
}
No he probado esto, pero puede lograrlo animando un flotante entre 0 (cajón cerrado) y 1 (cajón abierto) y luego pasando el valor a ActionBarDrawerToggle.onDrawerSlide(View, float)
. Creo que así es como el conmutador determina en qué estado debe estar el conmutador animado.
Algo como esto debería funcionar.
ValueAnimator anim = ValueAnimator.ofFloat(start, end);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float slideOffset = (Float) valueAnimator.getAnimatedValue();
toolbarDrawerToggle.onDrawerSlide(drawerLayout, slideOffset);
}
});
anim.setInterpolator(new DecelerateInterpolator());
// You can change this duration to more closely match that of the default animation.
anim.setDuration(500);
anim.start();
Parece que está funcionando según lo previsto, puede usar setDisplayHomeAsUpEnabled
para habilitar simplemente el botón de inicio para que se use como botón de retroceso, no hay animación.
Si está utilizando un cajón de navegación y desea que la animación no use setDisplayHomeAsUpEnabled
y para el tema del material (al menos con AppCompat v21) asegúrese de usar ActionBarDrawerToggle
del paquete v7.
La Play Store es un buen ejemplo. En el nivel superior tiene una actividad con un cajón de navegación y una hamburguesa que se anima cuando abre el cajón. Si tocas en una aplicación, se abre una nueva actividad que tiene una flecha hacia atrás.