Etwaige Probleme oder Pull-Anfragen werden nicht behandelt. Bitte denken Sie darüber nach, Ihre eigene Version zu forken, falls Änderungen erforderlich sind.
Veränderndes Android-Menü, Zurück-, Verwerfen- und Häkchen-Schaltflächen
Behalten Sie die volle Kontrolle über die Animation:
compile ' com.balysv.materialmenu:material-menu:2.0.0 '
Informationen zum Einrichten älterer Versionen der Bibliothek finden Sie in der README-Datei.
Verwenden Sie es als eigenständiges Zeichenelement in Ihrer 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 );
}
Eine einfache alte View
, die das Symbol zeichnet und eine API zum Bearbeiten seines Status bereitstellt. Sie können es in jedes Layout einbetten, einschließlich einer Toolbar
.
Die Anpassung ist auch über XML-Attribute möglich:
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)
Es gibt vier Symbolzustände:
BURGER , ARROW , X , CHECK
Um den Zeichenzustand zu verändern
MaterialMenu . animateIconState ( IconState state )
Um den Zeichenstatus ohne Animation zu ändern
MaterialMenu . setIconState ( IconState state )
So animieren Sie das Zeichenelement manuell (z. B. auf der Navigationsschubladenfolie):
MaterialMenu . setTransformationOffset ( AnimationState state , float value )
So blenden Sie das Zeichenobjekt ein oder aus:
MaterialMenu . setVisible ( boolean visible )
Dabei ist AnimationState
einer von BURGER_ARROW, BURGER_X, ARROW_X, ARROW_CHECK, BURGER_CHECK, X_CHECK
und value
liegt zwischen 0
und 2
Hinweis: Der Symbolstatus wird durch den aktuellen Offsetwert aufgelöst. Stellen Sie sicher, dass Sie offset
zwischen 0
und 1
für die Vorwärtsanimation und 1
und 2
für die Rückwärtsanimation verwenden, um den Symbolstatus bei der Aktivitätserholung korrekt zu speichern.
Implementieren Sie MaterialMenu
wie oben beschrieben in Ihre ActionBar und fügen Sie einen benutzerdefinierten DrawerListener
hinzu:
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.