AppBarLayout 스크롤 시 여러 요소 수납
6479 단어 Android
Android 앱에서 간혹 볼 수 있는 현대 스크롤
좀 힘들기 때문에 그 견해를 공유하고 싶어요.
좋은 물건
스크롤할 때 위에 제목 화면을 고정합니다
한 요소가 아닌 여러 요소로 구성하고자 하는 상황에서 다음과 같은 방법으로 실현되었다.
구현 방법
이것은 레이아웃에 대응하기 어려워서 코드로 제어되었다.
배치 구성
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/mainAppBar"
android:layout_width="match_parent"
android:layout_height="260dp"
android:background="@color/colorWhite"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsingToolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="@android:color/transparent"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:title="@string/mission"
app:expandedTitleMarginTop="24dp"
app:expandedTitleMarginStart="16dp"
app:collapsedTitleTextAppearance="@style/TextAppearance.Title.Collapsed"
app:expandedTitleTextAppearance="@style/TextAppearance.Title.Expanded"
>
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:gravity="center_vertical|start"
android:alpha="0"
app:layout_collapseMode="pin"
app:contentInsetStartWithNavigation="0dp"
app:contentInsetStart="0dp"
app:navigationIcon="@drawable/ic_arrow_back_black_24dp"
>
</androidx.appcompat.widget.Toolbar>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/collapsingContents"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
app:layout_collapseMode="parallax"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:layout_behavior="com.package.view.HidingBehavior"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/button_expand_back"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_margin="16dp"
app:srcCompat="@drawable/ic_arrow_back_black_24dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/mission"
android:layout_width="256dp"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="@string/vision"
android:textColor="@android:color/black"
android:layout_marginTop="8dp"
android:layout_marginStart="16dp"
app:layout_constraintTop_toBottomOf="@id/button_expand_back"
app:layout_constraintStart_toStartOf="parent"
/>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="100dp"
android:layout_height="100dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:scaleType="fitEnd"
app:srcCompat="@drawable/girls_guns"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
점호
binding.mainAppBar.addOnOffsetChangedListener(object : AppBarLayout.OnOffsetChangedListener {
override fun onOffsetChanged(appBarLayout: AppBarLayout?, verticalOffset: Int) {
val container = binding.collapsingContents
val toolbar = binding.toolbar
appBarLayout?.let {
if (verticalOffset == 0) {
if (state != CollapsingToolbarLayoutState.EXPANDED) {
state = CollapsingToolbarLayoutState.EXPANDED
container.alpha = 1f
toolbar.alpha = 0f
}
} else if (Math.abs(verticalOffset) >= it.totalScrollRange) {
if (state != CollapsingToolbarLayoutState.COLLAPSED) {
state = CollapsingToolbarLayoutState.COLLAPSED
container.alpha = 0f
toolbar.alpha = 1f
}
} else {
if (state == CollapsingToolbarLayoutState.COLLAPSED) {
container.alpha = 0.5f
toolbar.alpha = 0f
}
state = CollapsingToolbarLayoutState.INTERNEDIATE
}
}
}
})
private var state: CollapsingToolbarLayoutState = CollapsingToolbarLayoutState.EXPANDED
private enum class CollapsingToolbarLayoutState {
EXPANDED,
COLLAPSED,
INTERNEDIATE
}
마지막
제가 이번에 만든 코드를 공개했어요.
마음에 드는 게 있으면 연락 주세요.
https://github.com/hayato-k/CollspanToolbarLayout
Reference
이 문제에 관하여(AppBarLayout 스크롤 시 여러 요소 수납), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hayato-k/items/3198b21b4a93bee841d9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이것은 레이아웃에 대응하기 어려워서 코드로 제어되었다.
배치 구성
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/mainAppBar"
android:layout_width="match_parent"
android:layout_height="260dp"
android:background="@color/colorWhite"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsingToolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="@android:color/transparent"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:title="@string/mission"
app:expandedTitleMarginTop="24dp"
app:expandedTitleMarginStart="16dp"
app:collapsedTitleTextAppearance="@style/TextAppearance.Title.Collapsed"
app:expandedTitleTextAppearance="@style/TextAppearance.Title.Expanded"
>
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:gravity="center_vertical|start"
android:alpha="0"
app:layout_collapseMode="pin"
app:contentInsetStartWithNavigation="0dp"
app:contentInsetStart="0dp"
app:navigationIcon="@drawable/ic_arrow_back_black_24dp"
>
</androidx.appcompat.widget.Toolbar>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/collapsingContents"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
app:layout_collapseMode="parallax"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:layout_behavior="com.package.view.HidingBehavior"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/button_expand_back"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_margin="16dp"
app:srcCompat="@drawable/ic_arrow_back_black_24dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/mission"
android:layout_width="256dp"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="@string/vision"
android:textColor="@android:color/black"
android:layout_marginTop="8dp"
android:layout_marginStart="16dp"
app:layout_constraintTop_toBottomOf="@id/button_expand_back"
app:layout_constraintStart_toStartOf="parent"
/>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="100dp"
android:layout_height="100dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:scaleType="fitEnd"
app:srcCompat="@drawable/girls_guns"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
점호
binding.mainAppBar.addOnOffsetChangedListener(object : AppBarLayout.OnOffsetChangedListener {
override fun onOffsetChanged(appBarLayout: AppBarLayout?, verticalOffset: Int) {
val container = binding.collapsingContents
val toolbar = binding.toolbar
appBarLayout?.let {
if (verticalOffset == 0) {
if (state != CollapsingToolbarLayoutState.EXPANDED) {
state = CollapsingToolbarLayoutState.EXPANDED
container.alpha = 1f
toolbar.alpha = 0f
}
} else if (Math.abs(verticalOffset) >= it.totalScrollRange) {
if (state != CollapsingToolbarLayoutState.COLLAPSED) {
state = CollapsingToolbarLayoutState.COLLAPSED
container.alpha = 0f
toolbar.alpha = 1f
}
} else {
if (state == CollapsingToolbarLayoutState.COLLAPSED) {
container.alpha = 0.5f
toolbar.alpha = 0f
}
state = CollapsingToolbarLayoutState.INTERNEDIATE
}
}
}
})
private var state: CollapsingToolbarLayoutState = CollapsingToolbarLayoutState.EXPANDED
private enum class CollapsingToolbarLayoutState {
EXPANDED,
COLLAPSED,
INTERNEDIATE
}
마지막
제가 이번에 만든 코드를 공개했어요.
마음에 드는 게 있으면 연락 주세요.
https://github.com/hayato-k/CollspanToolbarLayout
Reference
이 문제에 관하여(AppBarLayout 스크롤 시 여러 요소 수납), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hayato-k/items/3198b21b4a93bee841d9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(AppBarLayout 스크롤 시 여러 요소 수납), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hayato-k/items/3198b21b4a93bee841d9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)