2016-01-28 152 views
0

我想在导航栏打开时使用Google的动画将导航图标变为箭头,并将其返回到抽屉导航图标。我也想知道,如果我可以在移动到其他活动时保持动作栏静止不动。抽屉导航栏的DrawerArrowToggle动画。

 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); 

@Override 
    public boolean onPrepareOptionsMenu(Menu menu) { 
     // if nav drawer is opened, hide the action items 
     boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); 

     return super.onPrepareOptionsMenu(menu); 
    } 

    /** * 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); 
     } 
    } 

} 
+0

问题是什么,究竟是什么? –

+0

嗯,我一直在寻找Android的Material Design,其中导航抽屉可以通过动画更改为后退箭头。我无法找到这个问题的直接答案,所以我个人问如何将它添加到我上面的代码中。代码没有问题,我想轻松地将它添加到我的代码中。 –

+0

您正在使用ActionBarDrawerToggle的v4支持版本。如果您需要汉堡箭头动画,则需要使用[v7 appcompat版本](http://developer.android.com/reference/android/support/v7/app/ActionBarDrawerToggle.html)。 –

回答

1

我想使用谷歌的动画在导航栏的开度来导航图标变成一个箭头,并把它回抽屉导航图标

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

为此,首先将v7 appcompat库添加到您的项目中。然后,在ActionBarDrawerToggleimport语句中,将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 S为不同的部分,而不是打开每个新Activity。鉴于代码中的注释,您所遵循的示例演示了如何执行此操作。

+0

我改变了一切,现在它可以工作,但我还有一个问题,我有一个活动,当它创建时,它会在操作栏中创建一个后退按钮。当点击一个单独的电子邮件并返回时,我已经选择了gmail中的动画。我怎么能做同样的事情? –