Back to project page Android.MovingToolbar.
The source code is released under:
MIT License
If you think the Android project Android.MovingToolbar listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.iamnbty.movingtoolbar; /* w ww . j a v a 2 s . c o m*/ import android.os.Build; import android.os.Bundle; import android.support.v4.view.ViewCompat; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.Toast; public class MainActivity extends ActionBarActivity implements NotifyScrollView.Callback { private NotifyScrollView mNotifyScrollView; private FrameLayout mImageFrameLayout; private ImageView mImageView; private LinearLayout mContentLinearLayout; private LinearLayout mToolbarLinearLayout; private Toolbar mToolbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // set content view setContentView(R.layout.activity_main); // view matching mNotifyScrollView = (NotifyScrollView) findViewById(R.id.notify_scroll_view); mImageFrameLayout = (FrameLayout) findViewById(R.id.image_frame_layout); mImageView = (ImageView) findViewById(R.id.image_view); mContentLinearLayout = (LinearLayout) findViewById(R.id.content_linear_layout); mToolbarLinearLayout = (LinearLayout) findViewById(R.id.toolbar_linear_layout); mToolbar = (Toolbar) findViewById(R.id.toolbar); // more setup setupNotifyScrollView(); setupToolbar(); } private void setupNotifyScrollView() { mNotifyScrollView.setCallback(this); ViewTreeObserver viewTreeObserver = mNotifyScrollView.getViewTreeObserver(); if (viewTreeObserver.isAlive()) { viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // get size int toolbarLinearLayoutHeight = mToolbarLinearLayout.getHeight(); int imageHeight = mImageView.getHeight(); // adjust image frame layout height ViewGroup.LayoutParams layoutParams = mImageFrameLayout.getLayoutParams(); if (layoutParams.height != imageHeight) { layoutParams.height = imageHeight; mImageFrameLayout.setLayoutParams(layoutParams); } // adjust top margin of content linear layout ViewGroup.MarginLayoutParams marginLayoutParams = (ViewGroup.MarginLayoutParams) mContentLinearLayout.getLayoutParams(); if (marginLayoutParams.topMargin != toolbarLinearLayoutHeight + imageHeight) { marginLayoutParams.topMargin = toolbarLinearLayoutHeight + imageHeight; mContentLinearLayout.setLayoutParams(marginLayoutParams); } // call onScrollChange to update initial properties. onScrollChanged(0, 0, 0, 0); } }); } } private void setupToolbar() { // set ActionBar as Toolbar setSupportActionBar(mToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); mToolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); } @Override public void onScrollChanged(int left, int top, int oldLeft, int oldTop) { // get scroll y int scrollY = mNotifyScrollView.getScrollY(); // calculate new y (for toolbar translation) float newY = Math.max(mImageView.getHeight(), scrollY); // translate toolbar linear layout and image frame layout if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { mToolbarLinearLayout.setTranslationY(newY); mImageFrameLayout.setTranslationY(scrollY * 0.5f); } else { ViewCompat.setTranslationY(mToolbarLinearLayout, newY); ViewCompat.setTranslationY(mImageFrameLayout, scrollY * 0.5f); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_settings: Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show(); return true; default: return super.onOptionsItemSelected(item); } } }