[英]Hamburger to arrow animation not working programmatically
我已經制作了一個服務器目錄瀏覽應用程序,它將改變Activity
本身內容。 我一直在添加一個功能: Navigation Drawer
和處理Toolbar
上的漢堡包和后退圖標,如下所示:
onBackPressed
返回主目錄時, 后箭頭到漢堡圖標的動畫。 我可以使用這個答案獲取漢堡包的動畫圖標(代碼用於逐字使用如下)但是當回到主目錄時無法再次獲得漢堡圖標(沒有包含該代碼和采取另一種方法,這是下一部分) :
ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float slideOffset = (Float) valueAnimator.getAnimatedValue();
mDrawerToggle.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();
為了在家庭和兒童目錄中來回瀏覽時,漢堡包和背面圖標之間的適當切換,我已經使用這個答案 (代碼如下所示)作為參考,並且能夠成功地實現家庭和家庭的1,2和3個功能。子目錄。
private void enableViews(boolean enable) {
if(enable) {
mDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true); // comment this line of code
if(!mToolBarNavigationListenerIsRegistered) {
mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Doesn't have to be onBackPressed
onBackPressed();
}
});
mToolBarNavigationListenerIsRegistered = true;
}
}
else {
// Remove back button
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setHomeButtonEnabled(false); // comment this line of code
// Show hamburger
mDrawerToggle.setDrawerIndicatorEnabled(true);
// Remove the/any drawer toggle listener
mDrawerToggle.setToolbarNavigationClickListener(null);
mToolBarNavigationListenerIsRegistered = false;
}
}
即將到來的問題是:在瀏覽目錄時,從漢堡到后退切換圖標,動畫部分根本不起作用。 但兩個圖標的狀態都隨着其功能而成功更改。 如果您需要更多信息進行故障排除,請與我們聯系。
如果您只是創建一個新項目,添加活動並使用模板NavigationDrawer (如果您使用Android Studio,則可以看到導航抽屜活動的工作示例。否則,請下載此repo )
當我想學習一個新的布局時,我只需加載模板,然后更改單個代碼片段,直到我得到我想要的內容。 通過這種方式,您可以看到什么做什么,什么在刪除某些行時停止工作以及應該如何完成。
我終於能夠解決它,在使用Android工作室的默認NavigationBarActivity進行修補后,以更深入的方式了解了ActionBarDrawerToggle的行為。
onDrawerSlide
的mDrawerToggle
的覆蓋以阻止滑動抽屜的漢堡包動畫是導致在動畫功能中首先阻止漢堡包動畫到箭頭的原因。 請注意兩個不同代碼中的這兩行(之前沒有包含它,但是你明白了):
@Override public void onDrawerSlide(View view, float slideOffset) { // blocks the animation super.onDrawerSlide(view, 0); } // from the animator function above mDrawerToggle.onDrawerSlide(drawerLayout, slideOffset);
解決方案:我刪除了覆蓋的onDrawerSlide
函數,但隨后,滑動抽屜漢堡包到箭頭動畫也會回來。
反解決方案:我還發現由於這一行,漢堡包的滑動抽屜動畫發生了: mDrawerLayout.setDrawerListener(mDrawerToggle)
,這又是一個不推薦使用的函數。 所以我只是評論了這一行,一切都按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.