ScrollView
스크롤 위치에 따라 CoordinatorLayout
클래스를 사용하여 Toolbar
불투명도를 적용하려고합니다. 나는 두 개의 뷰를 "수동으로 연결"하면서, 스크롤 이벤트 인 ScrollView
을 듣고 내 Toolbar
알파 값으로보고합니다.CoordinatorLayout으로 스크롤 할 때 툴바 배경 알파 값 변경
원하는 동작은 다음과 같습니다 툴바는 투명 상태 (텍스트와 배경 모두)에서 시작하고 끝입니다
완전히 흰색 배경 및 검정 텍스트 하나의보기는 완전히 스크롤 .
대략적인 동작은 Youtube video입니다.
현재 구현
레이아웃 파일 (간체)
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<my.package.widgets.DetailsTop
android:id="@+id/layout_details_top"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<my.package.widgets.DetailsBottom
android:id="@+id/layout_details_bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#00FFFFFF"/>
</RelativeLayout>
조각 구현
public class SearchVehicleDetailsFragment extends BaseFragment<SearchContract.ParentView> {
@Bind(R.id.layout_details_top) DetailsTop detailsTopLayout;
@Bind(R.id.layout_details_bottom) DetailsBottom detailsBottomLayout;
@Bind(R.id.scrollView) ScrollView scrollView;
@Bind(R.id.toolbar) Toolbar toolbar;
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
float alpha = (float) scrollView.getScrollY()/vehicleDetailsTopLayout.getHeight();
toolbar.setBackgroundColor(getColorWithAlpha(alpha, getResources().getColor(R.color.white)));
toolbar.setTitleTextColor(getColorWithAlpha(alpha, getResources().getColor(R.color.dark_grey)));
}
});
}
public static int getColorWithAlpha(float alpha, int baseColor) {
int a = Math.min(255, Math.max(0, (int) (alpha * 255))) << 24;
int rgb = 0x00ffffff & baseColor;
return a + rgb;
}
}
문제
그러나 이전 스 니펫이 완벽하게 작동하는 특히 간단한 솔루션 인 경우에도 나는 왜 이것이 CoordinatorLayout
과 함께 작동하지 않는지에 대해 약간 혼란스러워합니다. 또한, 사용자 정의 CoordinatorLayout.Behavior<android.support.v7.widget.Toolbar>
구현으로이 작업에 성공한 것으로 보이는 사람을 발견했습니다.
그의 custom CoordinatorLayout.Behavior implementation을 살펴볼 수 있습니다. 그는 또한 Medium에 대한 세부 정보를 제공합니다. 그러나 대신 전체 Toolbar
태그와 지원 설계 라이브러리 작업의 방법이 부분에 대한 이해의 강한 부족의 단지 <android.support.v7.widget.Toolbar .../>
의 많은 때문에, 나는 ... 그것을 구현할 수 없었어
질문
CoordinatorLayout
및 그 주변의 모든 클래스가 어떻게 작동하는지 알고 싶습니다. 그래서 아마도 내가 찾고있는 동작을 구현할 수있을 것입니다. ScrollView 스크롤 위치를 툴바 배경색의 알파 값에 연결합니다. 당신은 또한이 모든 것을 구현하는 방법을 알고 있다면 분명히
, 나는 행동을 실험했습니다 당신의 조각 :
멋진 컨셉으로 보입니다. –
코디네이터 레이아웃에 대한 자세한 설명을 보려면이 부분을 확인하십시오. https://medium.com/google-developers/intercepting-everything-with-coordinatorlayout-behaviors-8c6adc140c26#.nvsysrem6 –