Tout problème ou demande de tirage ne sera pas résolu. Veuillez envisager de créer votre propre version si des modifications sont nécessaires.
Morphing du menu Android, des boutons Retour, Rejeter et Cocher
Ayez le contrôle total de l’animation :
compile ' com.balysv.materialmenu:material-menu:2.0.0 '
Voir README pour configurer les anciennes versions de la bibliothèque.
Utilisez-le comme un dessin autonome dans votre Toolbar
:
private MaterialMenuDrawable materialMenu ;
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . toolbar );
Toolbar toolbar = ( Toolbar ) findViewById ( R . id . toolbar );
setSupportActionBar ( toolbar );
toolbar . setNavigationOnClickListener ( new View . OnClickListener () {
@ Override public void onClick ( View v ) {
// Handle your drawable state here
materialMenu . animateState ( newState );
}
});
materialMenu = new MaterialMenuDrawable ( this , Color . WHITE , Stroke . THIN );
toolbar . setNavigationIcon ( materialMenu );
}
Une vieille View
simple qui dessine l'icône et fournit une API pour manipuler son état. Vous pouvez l'intégrer dans n'importe quelle mise en page, y compris une Toolbar
.
La personnalisation est également disponible via les attributs XML :
app:mm_color="color" // Color of drawable
app:mm_visible="boolean" // Visible
app:mm_transformDuration="integer" // Transformation animation duration
app:mm_scale="integer" // Scale factor of drawable
app:mm_strokeWidth="integer" // Stroke width of icons (can only be 1, 2 or 3)
app:mm_rtlEnabled="boolean" // Enabled RTL layout support (flips all drawables)
app:mm_iconState="enum" // Set the intial state of the drawable (burger, arrow, x or check)
Il existe quatre états d'icône :
BURGER , ARROW , X , CHECK
Pour transformer l'état dessinable
MaterialMenu . animateIconState ( IconState state )
Pour changer l'état dessinable sans animation
MaterialMenu . setIconState ( IconState state )
Pour animer le dessin manuellement (c'est-à-dire sur la diapositive du tiroir de navigation) :
MaterialMenu . setTransformationOffset ( AnimationState state , float value )
Pour masquer ou afficher le dessinable :
MaterialMenu . setVisible ( boolean visible )
où AnimationState
est l'un des BURGER_ARROW, BURGER_X, ARROW_X, ARROW_CHECK, BURGER_CHECK, X_CHECK
et value
est comprise entre 0
et 2
Remarque : L'état de l'icône est résolu par la valeur de décalage actuelle. Assurez-vous d'utiliser offset
entre 0
et 1
pour l'animation vers l'avant et 1
et 2
pour l'arrière afin d'enregistrer correctement l'état de l'icône lors de la récréation d'activité.
Implémentez MaterialMenu
dans votre ActionBar comme décrit ci-dessus et ajoutez un DrawerListener
personnalisé :
private DrawerLayout drawerLayout ;
private boolean isDrawerOpened ;
private MaterialMenuDrawable materialMenu ;
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
toolbar = ( Toolbar ) findViewById ( R . id . toolbar );
setSupportActionBar ( toolbar );
materialMenu = new MaterialMenuDrawable ( this , Color . WHITE , Stroke . THIN );
toolbar . setNavigationIcon ( materialMenu );
drawerLayout = ( DrawerLayout ) findViewById ( R . id . drawer_layout );
drawerLayout . setDrawerListener ( new DrawerLayout . SimpleDrawerListener () {
@ Override
public void onDrawerSlide ( View drawerView , float slideOffset ) {
materialMenu . setTransformationOffset (
MaterialMenuDrawable . AnimationState . BURGER_ARROW ,
isDrawerOpened ? 2 - slideOffset : slideOffset
);
}
@ Override
public void onDrawerOpened ( View drawerView ) {
isDrawerOpened = true ;
}
@ Override
public void onDrawerClosed ( View drawerView ) {
isDrawerOpened = false ;
}
@ Override
public void onDrawerStateChanged ( int newState ) {
if ( newState == DrawerLayout . STATE_IDLE ) {
if ( isDrawerOpened ) {
menu . setIconState ( MaterialMenuDrawable . IconState . ARROW );
} else {
menu . setIconState ( MaterialMenuDrawable . IconState . BURGER );
}
}
}
});
}
Balys Valentukevicius
Copyright 2016 Balys Valentukevicius
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.