Transition in navigation drawer android

☆樱花仙子☆ 提交于 2019-12-18 16:49:29

问题


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

}



回答2:


Drawer behavior is a library use Android DrawerLayout Support library as Parent Class [Easy to migrate], that provide an extra behavior on drawer, such as, move view or scaling view's height while drawer on slide.

If current project use Android DrawerLayout Support library and kinda boring with the effect. Then, just change the layout code and calling necessary method for animation/effect.

Check out github code

Gradle

dependencies {
   implementation 'com.infideap.drawerbehavior:drawer-behavior:0.1.5'
}

if the gradle unable to sync, you may include this line in project level gradle,

repositories {
 maven{
   url "https://dl.bintray.com/infideap2/Drawer-Behavior"
 }
}


来源:https://stackoverflow.com/questions/41843485/transition-in-navigation-drawer-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!