package com.github.rubensousa.transitions; import android.os.Build; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.AppBarLayout; import android.support.design.widget.CollapsingToolbarLayout; import android.support.v4.widget.NestedScrollView; import android.support.v7.app.AppCompatActivity; import android.transition.Fade; import android.view.ViewTreeObserver; import android.view.animation.AccelerateDecelerateInterpolator; public class ToolbarActivity extends AppCompatActivity implements AppBarLayout.OnOffsetChangedListener { NestedScrollView nestedScrollView; AppBarLayout appbar; CollapsingToolbarLayout collapsingToolbarLayout; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setupTransitions(); setContentView(R.layout.activity_toolbar); appbar = (AppBarLayout) findViewById(R.id.appbar); nestedScrollView = (NestedScrollView) findViewById(R.id.nestedScrollView); collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsingLayout); if (savedInstanceState == null) { nestedScrollView.setAlpha(0f); nestedScrollView.getViewTreeObserver() .addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { if (nestedScrollView.getHeight() != 0) { appbar.setExpanded(true); appbar.addOnOffsetChangedListener(ToolbarActivity.this); nestedScrollView.getViewTreeObserver() .removeOnGlobalLayoutListener(this); nestedScrollView.animate().setStartDelay(400).alpha(1f); nestedScrollView.setTranslationY(nestedScrollView.getHeight() / 3); nestedScrollView.animate().setStartDelay(400).translationY(0) .setInterpolator(new AccelerateDecelerateInterpolator()); } } }); } } private void setupTransitions() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().setEnterTransition(new Fade()); } } @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { if (verticalOffset == 0) { AppBarLayout.LayoutParams layoutParams = (AppBarLayout.LayoutParams) collapsingToolbarLayout.getLayoutParams(); layoutParams.setScrollFlags(0); collapsingToolbarLayout.setLayoutParams(layoutParams); appBarLayout.removeOnOffsetChangedListener(this); } } }