おはようございます!
CA Tech Dojo/Challenge/JOB Advent Calendar 2019(長ぇ)
の4日目を担当をさせていただきます、zoothezooです!!
夏休みにDojo,Challengeに参加し、
12月から(厳密には明日)TechJOBに挑戦します。
では、参りましょう。
概要
プロフィール画面でよく見るような上にスクロールすると、
ヘッダー画像がいい感じに消えていく??やつを作りたいと思います。
理解し難い実装たくさんあると思いますが、
お手柔らかにお願いしますね。
これです。
実装
- activity_main.xml
 (かなり省略しています)
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
    android:fitsSystemWindows="true">
    <com.google.android.material.appbar.AppBarLayout
        android:fitsSystemWindows="true"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
        <com.google.android.material.appbar.CollapsingToolbarLayout
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:layout_anchor="@+id/appbar"
            app:layout_anchorGravity="center"
            app:title="Profile">
            <ImageView
                android:minHeight="100dp"
                android:scaleType="centerCrop"
                app:layout_collapseMode="parallax"
                android:src="@drawable/curry"
                />
            <androidx.appcompat.widget.Toolbar
                app:layout_collapseMode="parallax"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                />
        </com.google.android.material.appbar.CollapsingToolbarLayout>
    </com.google.android.material.appbar.AppBarLayout>
    <include
        layout="@layout/basic_profile"
        app:layout_anchor="@id/appbar"
        app:layout_anchorGravity="bottom|center"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
- basic_profile.xml
 (中身は自由に書いてください)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout>
    <androidx.core.widget.NestedScrollView
        android:fitsSystemWindows="true">
    </androidx.core.widget.NestedScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
各要素について
以下の要素が重要になります。
Coordinatorlayout
- スーパークラス : FrameLayout
- Constraintlayoutばっかり使ってたから慣れなかった
 
- 複数の子ビューとの相互作用のコンテナ
AppBarLayout
- CoordinatorLayoutの直下に配置
- 垂直方向のスクロールができる
- nestedscrollviewやrecyclerview
CollapasingToolbarLayout
- AppBarLayoutの直下に配置
- ↑をCoordinatorLayout内に配置しないと、
 CollapsingToolbarLayoutのスクロールなどの機能は使えなさそう
- collapseModeについて
- parallax,pin,(なし)がある
- parallaxは、視差方式でスクロールするらしい(英語難しかった)
 
まとめ
僕はかなりこれを実装できた時感動したんですけど...(めっちゃ調べたし、バグるし)
ユーザとして使う分にはすげぇ程度に終わってしまいますが、
実装してみるとやっぱりエンジニアの人ってすげぇ(!!!!!!!)ってなりますよね
よかったらgithubに載せてますので見てください。