我已经实现了主/细节流程,我想在添加片段后获得从汉堡包图标到箭头图标的过渡动画(与打开导航抽屉时的动画相同)。
我正在使用如下代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
toggle = new ActionBarDrawerToggle(this, drawer, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.setDrawerIndicatorEnabled(true);
toggle.syncState();
//Add home page fragment
FragmentManager fragmentManager = getFragmentManager();
HabitHomeFragment homePageFragment = new HabitHomeFragment();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.habit_home, homePageFragment);
fragmentTransaction.commit();}
添加详细信息片段时:
public void showDetails() {
toggle.setDrawerIndicatorEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
fragmentTransaction.replace(R.id.habit_home, habitDetailsFragment).addToBackStack("detail").commit();}
和工具栏:
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
....
目前,更改片段后,图标只是更改,没有动画。
首先做一些解释。
android.support.v7.app.ActionBarDrawerToggle
对汉堡到箭头图标和动画使用特殊的可绘制类。
班级是android.support.v7.graphics.drawable.DrawerArrowDrawable
DrawerArrowDrawable
用方法实现动画setProgress(float progress)
,其中进度从 0(汉堡包)到 1(箭头)。
ActionBarDrawerToggle 用途private void setPosition(float position)
那个叫DrawerArrowDrawable.setProgress()
ActionBarDrawerToggle 用途public void onDrawerSlide(View drawerView, float slideOffset)
呼叫私人setPosition()
ActionBarDrawerToggle
calls toolbar.setNavigationOnClickListener()
在构造函数及其侦听器中,用于切换抽屉。
ActionBarDrawerToggle
跟踪实际情况DrawerArrowDrawable
state. Toolbar
and ActionBar
不跟踪实际DrawerArrowDrawable
state.
那么,在活动中你应该做什么。选项-A,使用 ActionBarDrawerToggle。
// define a variable to track hamburger-arrow state
protected boolean isHomeAsUp = false;
protected DrawerLayout drawer;
protected Toolbar toolbar;
protected ActionBarDrawerToggle toggle;
// I've implemented it in setContentView(), but you can implement it in onCreate()
@Override
public void setContentView(@LayoutRes int layoutResID) {
super.setContentView(layoutResID);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.drawer_open, R.string.drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
// overwrite Navigation OnClickListener that is set by ActionBarDrawerToggle
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (drawer.isDrawerOpen(GravityCompat.START)){
drawer.closeDrawer(GravityCompat.START);
} else if (isHomeAsUp){
onBackPressed();
} else {
drawer.openDrawer(GravityCompat.START);
}
}
});
}
// call this method for animation between hamburged and arrow
protected void setHomeAsUp(boolean isHomeAsUp){
if (this.isHomeAsUp != isHomeAsUp) {
this.isHomeAsUp = isHomeAsUp;
ValueAnimator anim = isHomeAsUp ? ValueAnimator.ofFloat(0, 1) : ValueAnimator.ofFloat(1, 0);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float slideOffset = (Float) valueAnimator.getAnimatedValue();
toggle.onDrawerSlide(drawer, slideOffset);
}
});
anim.setInterpolator(new DecelerateInterpolator());
// You can change this duration to more closely match that of the default animation.
anim.setDuration(400);
anim.start();
}
}
或者你可以设置一个DrawerArrowDrawable
作为导航图标toolbar.setNavigationIcon()
并对其进行动画处理而无需ActionBarDrawerToggle
参见选项-B:https://stackoverflow.com/a/42024138/1148784 https://stackoverflow.com/a/42024138/1148784
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)