Giter VIP home page Giter VIP logo

collapsing-toolbar's Introduction

collapsing-toolbar

collapsing toolbar android material design

garis besar turorial

  1. tambahkan support design library pada gradle project
  dependencies{
    ...
    compile 'com.android.support:design:25.3.1'
  }
  1. buat layout structure seperti berikut:
  CoordinatorLayout
  |___AppBarLayout
  |   |___CollapsingToolbarLayout
  |      |___ImageView
  |      |___Toolbar
  |___RecyclerView      

keterangan:

  • Coordinator Layout
    A powerful FrameLayout that specifies behavior for child views for various interactions. It also allows anchoring of floating views in your layout.
  • AppBarLayout
    It is a special kind of vertical LinearLayout. It helps respond to its children’s scroll events (scroll gestures). Additionally, it’s responsible for implementing many features of Material Design’s AppBarLayout.
  • CollapsingToolbarLayout
    It is a Toolbar wrapper which makes the ‘Flexible Space’ pattern possible. It collapses the image header while decreasing the expanded title to a Toolbar title.
  1. Detail XML collapsing toolbar
  <...CoordinatorLayout>  
    <...AppBarLayout>  
      <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginStart="@dimen/activity_margin_content"
            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">
          
          <ImageView/>
          <Toolbar />
          
      </android.support.design.widget.CollapsingToolbarLayout />
   </...AppBarLayout>
 </..CoordinatorLayout>
  1. gunakan Scrim agar text pada collapsing toolbar. Scrim adalah semi transparent gradient yang diperlukan sebagai gradasi pada sisi atas dan sisi bawah ImageView agar text pada collapsing toolbar menjadi lebih jelas.
  <View 
    android:layout_width="match_parent" 
    android:layout_height="160dp" 
    android:layout_gravity="bottom"               
    android:background="@drawable/scrim"/>

drawable scrim.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <gradient
        android:angle="90"
        android:endColor="@android:color/transparent"
        android:startColor="#66000000"/>
</shape>
  1. tempatkan FAB(FloatingActionButton) di pojok-kanan-bawah pada AppBarLayout:
  <android.support.design.widget.FloatingActionButton
        ...
        app:layout_anchor="@+id/appbar"
        app:layout_anchorGravity="bottom|right|end" />
  1. buat hidden action add agar FAB add pada collapsing button, pada saat ditutup(collapsed) tetap bisa diakses, tambahkan menu add pada options menu. Untuk melakukannya kita perlu listener berikut: OffsetChangedListener.
  • implementasi OffsetChangedListener:
 appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
           @Override
           public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
               //  Vertical offset == 0 indicates appBar is fully expanded.
               if (Math.abs(verticalOffset) > 200) {
                   appBarExpanded = false;
                   invalidateOptionsMenu();
               } else {
                   appBarExpanded = true;
                   invalidateOptionsMenu();
               }
           }
       });
  • update toolbar menu pertama-tama tambahkan menu default ke dalam toolbar dengan mengimplementasikan onCreateOptionsMenu()
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
     getMenuInflater().inflate(R.menu.menu_main, menu);
     collapsedMenu = menu;
     return true;
 }

kemudian tambahkan menu add pada toolbar ketika collapsing toolbar tertutup.

@Override
   public boolean onPrepareOptionsMenu(Menu menu) {
       if (collapsedMenu != null
               && (!appBarExpanded || collapsedMenu.size() != 1)) {
           //collapsed
           collapsedMenu.add("Add")
                   .setIcon(R.drawable.ic_action_add)
                   .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
       } else {
           //expanded

       }
       return super.onPrepareOptionsMenu(collapsedMenu);
   }
  1. warna dinamis dengan ColorPalette API ketika collapsing toolbar tertutup, maka warna toolbar seharusnya mengikuti warna yang paling dominan dari gambar. Untuk melakukannya kita perlu menggunkan ColorPalette API dari android support library. Tambahkan dulu dependency ke dalam file build.gradle.
dependencies {
   …
   compile 'com.android.support:palette-v7:25.0.2'
}

kemudian untuk menggunakannya seperti berikut:

  Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
                R.drawable.header);
        Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
            @Override
            public void onGenerated(Palette palette) {
                mutedColor = palette.getMutedColor(R.attr.colorPrimary);
                collapsingToolbar.setContentScrimColor(mutedColor);
            }
        });

ada beberapa pilihan warna variant palette seperti berikut:

  • Light
  • Vibrant
  • Dark
  • Muted
  1. sumber original tutorial dijelaskan dengan sangat baik disini: http://blog.iamsuleiman.com/toolbar-animation-with-android-design-support-library/

collapsing-toolbar's People

Contributors

arsan-official avatar arifardians avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.