package com.reactnativenavigation.views.collapsingToolbar; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.view.MotionEvent; import android.view.View; import com.reactnativenavigation.params.CollapsingTopBarParams; import com.reactnativenavigation.params.StyleParams; import com.reactnativenavigation.utils.ViewUtils; import com.reactnativenavigation.views.TitleBar; import com.reactnativenavigation.views.TitleBarBackground; import com.reactnativenavigation.views.TranslucentDrawable; public class CollapsingTitleBar extends TitleBar implements View.OnTouchListener { private CollapsingTextView title; private int collapsedHeight; private final ScrollListener scrollListener; private final CollapsingTopBarParams params; private TitleBarBackground titleBarBackground; public CollapsingTitleBar(Context context, int collapsedHeight, ScrollListener scrollListener, CollapsingTopBarParams params) { super(context); this.collapsedHeight = collapsedHeight; this.scrollListener = scrollListener; this.params = params; addCollapsingTitle(); setOnTouchListener(this); setInitialTitleViewVisibility(); } private void setInitialTitleViewVisibility() { ViewUtils.runOnPreDraw(this, new Runnable() { @Override public void run() { View titleView = getTitleView(); if (titleView == null) { return; } if (params.showTitleWhenExpended) { titleView.setAlpha(1); } else if (params.showTitleWhenCollapsed) { titleView.setAlpha(0); } } }); } @Override public void hideTitle() { if (!params.showTitleWhenExpended) { super.hideTitle(); } titleBarBackground.showTranslucentBackground(); } @Override public void showTitle() { super.showTitle(); titleBarBackground.showSolidBackground(); } private void addCollapsingTitle() { if (params.hasBackgroundImage()) { title = new CollapsingTextView(getContext(), collapsedHeight); addView(title); } } @Override public void setTitle(CharSequence title) { if (params.hasBackgroundImage()) { this.title.setText((String) title); } else { super.setTitle(title); } } @Override protected void setTitleTextColor(StyleParams params) { if (this.params.hasBackgroundImage()) { title.setTextColor(params); } else { super.setTitleTextColor(params); } } @Override protected void setSubtitleTextColor(StyleParams params) { if (this.params.hasReactView()) { super.setSubtitleTextColor(params); } } @Override protected void setBackground(StyleParams params) { if (titleBarBackground == null) { titleBarBackground = createBackground(params, params.collapsingTopBarParams.expendedTitleBarColor, params.collapsingTopBarParams.scrimColor); setBackground(titleBarBackground); } } private TitleBarBackground createBackground(StyleParams styleParams, StyleParams.Color expendedColor, StyleParams.Color collapsedColor) { final Drawable expendedDrawable = styleParams.topBarTranslucent ? new TranslucentDrawable() : new ColorDrawable(expendedColor.getColor(Color.TRANSPARENT)); final Drawable collapsedDrawable = new ColorDrawable(collapsedColor.getColor(Color.TRANSPARENT)); return new TitleBarBackground(expendedDrawable, collapsedDrawable); } public void collapse(CollapseAmount amount) { if (amount.hasExactAmount()) { collapse(amount.get()); } } private void collapse(float collapse) { if (params.hasBackgroundImage()) { title.setTranslationY(0); title.collapseBy(collapse); } setTranslationY(-collapse); } @Override public boolean onTouch(View v, MotionEvent event) { return scrollListener.onTouch(event); } }