어떤 문제나 풀 요청도 해결되지 않습니다. 변경이 필요한 경우 자체 버전을 포크하는 것을 고려해 보십시오.
Android 메뉴 모핑, 뒤로가기, 닫기 및 확인 버튼
애니메이션을 완전히 제어할 수 있습니다.
compile ' com.balysv.materialmenu:material-menu:2.0.0 '
이전 버전의 라이브러리를 설정하려면 README를 참조하세요.
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 );
}
아이콘을 그리고 아이콘 상태를 조작하기 위한 API를 제공하는 평범한 기존 View
입니다. Toolbar
포함한 모든 레이아웃에 이를 포함할 수 있습니다.
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)
아이콘 상태는 네 가지가 있습니다.
BURGER , ARROW , X , CHECK
Drawable 상태를 변형하려면
MaterialMenu . animateIconState ( IconState state )
애니메이션 없이 Drawable 상태를 변경하려면
MaterialMenu . setIconState ( IconState state )
드로어블을 수동으로 애니메이션하려면(예: 탐색 창 슬라이드에서):
MaterialMenu . setTransformationOffset ( AnimationState state , float value )
드로어블을 숨기거나 표시하려면 다음 안내를 따르세요.
MaterialMenu . setVisible ( boolean visible )
여기서 AnimationState
는 BURGER_ARROW, BURGER_X, ARROW_X, ARROW_CHECK, BURGER_CHECK, X_CHECK
중 하나이고 value
은 0
과 2
사이입니다.
참고: 아이콘 상태는 현재 오프셋 값으로 해결됩니다. 활동 재현 시 아이콘 상태를 올바르게 저장하려면 순방향 애니메이션의 경우 0
과 1
사이, 역방향의 경우 1
과 2
사이의 offset
사용해야 합니다.
위에서 설명한 대로 ActionBar에 MaterialMenu
구현하고 사용자 정의 DrawerListener
추가합니다.
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 );
}
}
}
});
}
발리스 발렌투케비시우스
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.