抽屉导航栏的DrawerArrowToggle动画

时间:2016-01-28 01:20:31

标签: android animation navigation-drawer

我想使用Google的动画在打开导航栏时将导航图标变为箭头,然后将其转回抽屉导航图标。我也想知道在转移到另一个活动时我是否可以保持动作栏静止不动。

--- --- EDIT

此问题已过时且不再相关,因为材料设计中的导航抽屉已经为开发人员提供了一个简单而无缝的过程,不再需要开发人员将汉堡包侧面菜单添加到后退箭头动画中,因为它已经是提供。

     menutitles = getResources().getStringArray(R.array.sidebar);
            mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
            mDrawerList = (ListView) findViewById(R.id.slider_list);

            mDrawerList.setAdapter(new ArrayAdapter<String>(this,
                    R.layout.list_tem, R.id.title, menutitles));
            // Set the list's click listener
            mTitle = mDrawerTitle = getTitle();
            mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
            mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                    R.mipmap.drawer, R.string.drawer_open, R.string.drawer_close) {

                /**
                 * Called when a drawer has settled in a completely closed state.
                 */
                public void onDrawerClosed(View view) {
                    super.onDrawerClosed(view);
                    getActionBar().setTitle(mTitle);
                    invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
                }

                /**
                 * Called when a drawer has settled in a completely open state.
                 */
                public void onDrawerOpened(View drawerView) {
                    super.onDrawerOpened(drawerView);
                    getActionBar().setTitle(mDrawerTitle);
                    invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
                }
            };

            // Set the drawer toggle as the DrawerListener
            mDrawerLayout.setDrawerListener(mDrawerToggle);
            getActionBar().setDisplayHomeAsUpEnabled(true);
            getActionBar().setHomeButtonEnabled(true);

    /**   * When using the ActionBarDrawerToggle, you must call it during   * onPostCreate() and onConfigurationChanged()...   */
    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();    }
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        // Pass any configuration change to the drawer toggles
        mDrawerToggle.onConfigurationChanged(newConfig);
    }
    /** Swaps fragments in the main content view */
    private void selectItem(int position) {
        switch (position){
            case 0:
                Intent intent = new Intent(this, MainActivity.class);
                startActivity(intent);
                finish();
                break;
            case 1: Intent intent2 = new Intent(this, Time.class);
                startActivity(intent2);
                finish();
                break;
            case 2: Intent intent3 = new Intent(this, Temperature.class);
                startActivity(intent3);
                finish();
                break;
            case 3: Intent intent4 = new Intent(this, Weight.class);
                startActivity(intent4);
                finish();
                break;
            case 4: Intent intent5 = new Intent(this, Length.class);
                startActivity(intent5);
                finish();
                break;
            case 5: Intent intent6 = new Intent(this, Money.class);
                startActivity(intent6);
                finish();
                break;
            case 6:
                Intent intent1 = new Intent(this, Metric.class);
                startActivity(intent1);
                finish();
                break;
            case 7:
                Intent intent7 = new Intent(this, Food.class);
                startActivity(intent7);
                finish();
                break;
            case 8:
                Intent intent8 = new Intent(this, Data.class);
                startActivity(intent8);
                finish();
                break;
        }
        // Create a new fragment and specify the planet to show based on position


        // Highlight the selected item, update the title, and close the drawer
        mDrawerList.setItemChecked(position, true);
        setTitle("Converjz");
        mDrawerLayout.closeDrawer(mDrawerList);
    }

    @Override
    public void setTitle(CharSequence title) {
        mTitle = title;
        getActionBar().setTitle(mTitle);
    }




    private class DrawerItemClickListener implements ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView parent, View view, int position, long id) {
            selectItem(position);
        }
    }

}

1 个答案:

答案 0 :(得分:1)

  

我想使用Google的动画在打开导航栏时将导航图标变为箭头,然后将其转回抽屉导航图标

查看构造函数调用,很明显您正在使用ActionBarDrawerToggle的v4支持版本。如果你想要汉堡箭头动画,你需要使用v7 appcompat版本。

为此,首先将v7 appcompat库添加到项目中。然后,在ActionBarDrawerToggle import语句中,将v4更改为v7,并在构造函数调用中删除R.mipmap.drawer参数。

import android.support.v7.app.ActionBarDrawerToggle;
...

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
    R.string.drawer_open, R.string.drawer_close) {...}
  

我也想知道在转移到另一项活动时是否可以保持动作栏不动。

如果您想使用导航抽屉模式,您应该将Fragment用于不同的部分,而不是为每个部分打开一个新的Activity。鉴于代码中的注释,您所遵循的示例演示了如何执行此操作。