How do the animation hiding the ActionBar and keeping tabs?

前端 未结 4 500
挽巷
挽巷 2020-12-21 08:03

In version 5 of Google Play Store app, scroll to the content, ActionBar on with scrolling, but the tabs are fixed to get on top.

How to do this?

BEFO

相关标签:
4条回答
  • 2020-12-21 08:49

    Answer is here:

    https://github.com/ksoichiro/Android-ObservableScrollView :D

    This library is excellent for my case and very others

    0 讨论(0)
  • 2020-12-21 08:57

    Take a look at these links (specially second link):

    Android google-play-liked listview

    ListView with a (half- and or) hidable header

    0 讨论(0)
  • 2020-12-21 09:08

    As others have suggested, use ObservableScrollView from: https://github.com/ksoichiro/Android-ObservableScrollView

    Try putting both the Toolbar and the SlidingTabStrip in the same container, then animate that container as the user scrolls the ObservableScrollView, for example:

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             tools:context=".MainActivity">
    
        <com.github.ksoichiro.android.observablescrollview.ObservableListView
            android:id="@+id/listView"
            android:layout_height="match_parent"
            android:layout_width="match_parent"/>
    
        <LinearLayout
            android:id="@+id/toolbarContainer"
            android:orientation="vertical"
            android:elevation="10dp"
            android:background="@color/material_deep_teal_200"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"/>
    
                <!--Placeholder view, your tabstrip goes here-->
                <View
                    android:layout_width="wrap_content"
                    android:layout_height="48dp"/>
       </LinearLayout>
    </FrameLayout>
    

    Then when you override the ObservableScrollViewCallbacks you could do something like this:

    @Override
    public void onScrollChanged(int scrollY, boolean firstScroll, boolean dragging) {
    
        toolbarContainer.animate().cancel();
    
        int scrollDelta = scrollY - oldScrollY;
        oldScrollY = scrollY;
    
        float currentYTranslation = -toolbarContainer.getTranslationY();
        float targetYTranslation = Math.min(Math.max(currentYTranslation + scrollDelta, 0), toolbarHeight);
        toolbarContainer.setTranslationY(-targetYTranslation);
    }
    
    @Override
    public void onUpOrCancelMotionEvent(ScrollState scrollState) {
        float currentYTranslation = -toolbarContainer.getTranslationY();
        int currentScroll = listView.getCurrentScrollY();
    
        if (currentScroll < toolbarHeight) {
            toolbarContainer.animate().translationY(0);
        } else if (currentYTranslation > toolbarHeight /2) {
            toolbarContainer.animate().translationY(-toolbarHeight);
        } else {
            toolbarContainer.animate().translationY(0);
        }
    }
    

    The onUpOrCancelMotionEvent stuff is to animate the container to prevent the toolbar from being only half shown/hidden.

    Here's a demo video just for reference: https://drive.google.com/file/d/0B7TH7VeIpgSQSzZER1NneWpYa1E/view?usp=sharing

    0 讨论(0)
  • 2020-12-21 09:08

    Great that you answer your question by yourself ;) Here is another small hint: Use a seperated layout for your tabs or integrate them into your toolbar and then tranlsate the toolbar only as far as you can see the tabs on top.

    0 讨论(0)
提交回复
热议问题