ปัญหาหรือคำขอดึงใด ๆ จะไม่ได้รับการแก้ไข โปรดพิจารณาฟอร์กเวอร์ชันของคุณเองหากจำเป็นต้องเปลี่ยนแปลง
ปรับเปลี่ยนเมนู Android ย้อนกลับ ยกเลิก และตรวจสอบปุ่ม
ควบคุมแอนิเมชั่นได้เต็มรูปแบบ:
compile ' com.balysv.materialmenu:material-menu:2.0.0 '
ดู README สำหรับการตั้งค่าไลบรารีเวอร์ชันเก่า
ใช้เป็น Drawable แบบสแตนด์อโลนใน 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 );
}
View
แบบเก่าธรรมดาที่วาดไอคอนและจัดเตรียม API เพื่อจัดการสถานะของไอคอน คุณสามารถฝังไว้ในเค้าโครงใดก็ได้ รวมถึง 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
เพื่อปรับเปลี่ยนสถานะที่สามารถวาดได้
MaterialMenu . animateIconState ( IconState state )
เพื่อเปลี่ยนสถานะการวาดโดยไม่มีภาพเคลื่อนไหว
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
หมายเหตุ: สถานะไอคอนได้รับการแก้ไขด้วยค่าออฟเซ็ตปัจจุบัน ตรวจสอบให้แน่ใจว่าคุณใช้ offset
ระหว่าง 0
ถึง 1
สำหรับภาพเคลื่อนไหวไปข้างหน้า และ 1
และ 2
สำหรับย้อนกลับ เพื่อบันทึกสถานะไอคอนอย่างถูกต้องในการสร้างกิจกรรมใหม่
ใช้ MaterialMenu
ใน ActionBar ของคุณตามที่อธิบายไว้ข้างต้น และเพิ่ม 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.