Transition in navigation drawer android

2019-02-09 22:22发布

问题:

Anyone having idea that how to achieve this type of transition. When we open Navagation drawer full screen is getting animation like this. I also looked at reside menu but here menu is predefined not as i want.

I also tried with NavigationDrawer but not got succeed.

   drawer.addDrawerListener(new DrawerLayout.DrawerListener() {
        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
            float moveFactor = (linearLayout.getWidth() * slideOffset);

            float min = 0.9f;
            float max = 1.0f;
            float scaleFactor = (max - ((max - min) * slideOffset));
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
            {
                linearLayout.setTranslationX(moveFactor);
                linearLayout.setScaleX(scaleFactor);
                linearLayout.setScaleY(scaleFactor);
            }
            else
            {
                AnimationSet animSet = new AnimationSet(true);


                TranslateAnimation anim = new TranslateAnimation(lastTranslate, moveFactor, 0.0f, 0.0f);
                anim.setDuration(0);
                anim.setFillAfter(true);
                animSet.addAnimation(anim);
                ScaleAnimation scale = new ScaleAnimation(1.15f, 1.0f, 1.15f, 1.0f);
                scale.setDuration(10);
                scale.setFillAfter(true);
                animSet.addAnimation(scale);

                drawerView.startAnimation(animSet);

                lastTranslate = moveFactor;
            }
        }

        @Override
        public void onDrawerOpened(View drawerView) {

        }

        @Override
        public void onDrawerClosed(View drawerView) {

        }

        @Override
        public void onDrawerStateChanged(int newState) {

        }
    });

Thanks in advance

回答1:

Finally I got my answer through this link for original post. Please have a look here

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="test.pyramidions.com.dynamicview2.MainActivity"
tools:openDrawer="start">


<RelativeLayout
    android:id="@+id/holder"
    android:layout_width="match_parent"
    android:background="@drawable/shadow"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <LinearLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:background="@color/colorAccent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include
            android:id="@+id/toolbar"
            layout="@layout/toolbar" />


        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1" />

    </LinearLayout>
</RelativeLayout>


<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    android:layout_gravity="start"
    app:headerLayout="@layout/nav_header_main"
    app:menu="@menu/drawer_menu" />

 </android.support.v4.widget.DrawerLayout>

and for MainActivity.java please have a look below

        public class MainActivity extends AppCompatActivity {
public TabsPagerAdapter tabsPagerAdapter;
public static ViewPager pager;
int Numboftabs = 2;
Toolbar toolbar;
public NavigationView navigationView;
public DrawerLayout drawer;
View holderView, contentView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    navigationView = (NavigationView) findViewById(R.id.nav_view);
    holderView = findViewById(R.id.holder);
    contentView = findViewById(R.id.content);
    tabsPagerAdapter = new TabsPagerAdapter(getSupportFragmentManager(), Numboftabs);
    pager = (ViewPager) findViewById(R.id.pager);
    pager.setAdapter(tabsPagerAdapter);
    toolbar.setNavigationIcon(new DrawerArrowDrawable(this));
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                                             @Override
                                             public void onClick(View v) {
                                                 if (drawer.isDrawerOpen(navigationView)) {
                                                     drawer.closeDrawer(navigationView);
                                                 } else {
                                                     drawer.openDrawer(navigationView);
                                                 }
                                             }
                                         }
    );


    drawer.setScrimColor(Color.TRANSPARENT);
    drawer.addDrawerListener(new DrawerLayout.SimpleDrawerListener() {
                                 @Override
                                 public void onDrawerSlide(View drawer, float slideOffset) {


                                     contentView.setX(navigationView.getWidth() * slideOffset);
                                     RelativeLayout.LayoutParams lp =
                                             (RelativeLayout.LayoutParams) contentView.getLayoutParams();
                                     lp.height = drawer.getHeight() -
                                             (int) (drawer.getHeight() * slideOffset * 0.3f);
                                     lp.topMargin = (drawer.getHeight() - lp.height) / 2;
                                     contentView.setLayoutParams(lp);
                                 }

                                 @Override
                                 public void onDrawerClosed(View drawerView) {
                                 }
                             }
    );

}