更新滞りがちですがちまちま公式のCodeLab進めてます。
背景色の指定
Jetpack Compose のテーマ設定より
要素の色を設定する際は、適切なコンテンツ色である CompositionLocal 値が設定されるため、Surface を使用することをおすすめします。Modifier.background を直接呼び出すと適切なコンテンツ色が設定されないため、注意が必要です。
ColumnやRowなどのレイアウト用のコンポーネントのmodifierにModifier.background()でMaterialTheme.colors.backgroundなどを設定しても、その内部のコンテンツはonBackgroundなどにはなりません。その場合はSurface()で色を指定し、その内部にColumnやRowなどを配置することで、ColumnやRowの内部コンテンツにもテーマカラーを適用できます。
これ思いっきりModifier側でやってたので意識して修正して行かねば。
-Row(Modifier.background(MaterialTheme.colors.primary)) { +Surface(color = MaterialTheme.colors.primary) {
単純な値変化のアニメーション
val backgroundColor = if (tabPage == TabPage.Home) Purple100 else Green300
で変化させていたのをanimateColorAsStateを使って指定するだけ
実際の適用は各要素で。
val backgroundColor by animateColorAsState(if (tabPage == TabPage.Home) Purple100 else Green300)
表示(ボタンの拡大・縮小)のアニメーション
単純に表示を切り替える場合はifの中がextendedによって表示・非表示
if (extended) { Text( text = stringResource(R.string.edit), modifier = Modifier .padding(start = 8.dp, top = 3.dp) ) }
アニメーションさせる場合
AnimatedVisibility(extended) { Text( text = stringResource(R.string.edit), modifier = Modifier .padding(start = 8.dp, top = 3.dp) ) }
アイテムの幅に合わせてアニメーション(表示・非表示)
enterに表示契機、exitに非表示契機を指定する。
各OffsetでfullHeight(縦の表示非表示なので)を指定する。
animationSpecを指定することで様々なアニメーションの指定が可能になるが後日見てみる。
AnimatedVisibility( visible = shown, enter = slideInVertically( // Enters by sliding down from offset -fullHeight to 0. initialOffsetY = { fullHeight -> -fullHeight } ), exit = slideOutVertically( // Exits by sliding up from offset 0 to -fullHeight. targetOffsetY = { fullHeight -> -fullHeight } ) ) { Surface( modifier = Modifier.fillMaxWidth(), color = MaterialTheme.colors.secondary, elevation = 4.dp ) { Text( text = stringResource(R.string.edit_message), modifier = Modifier.padding(16.dp) ) } }
参考:Jetpack Compose で要素をアニメーション化するのCodeLab