顯示與隱藏動畫

animateContentSize()

animateContentSize會根據大小不同產生動畫。
img

img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Composable
fun AnimateContentSizeExample() {
  var isExpanded by remember { mutableStateOf(false) }
  Box(
    modifier = Modifier
      .fillMaxWidth()
      .animateContentSize()
      .background(Color.Blue)
      .padding(16.dp)
      .clickable {
        isExpanded = !isExpanded
      }
) {
    Column {
      Text("click")
      if(isExpanded) {
        Text("hello \n" +
            "world \n" +
            "hi \n",
          modifier = Modifier.background(Color.White))
      }
    }
  }
}

animateContentSize()要放置在size大小相關的函式之前。

1
2
3
4
5
6
7
8
9
10
11
var expanded by remember { mutableStateOf(false) }
Box(
    modifier = Modifier
        .background(colorBlue)
        .animateContentSize()
        .height(if (expanded) 400.dp else 200.dp)
        .fillMaxWidth()
        .clickable() {
            expanded = !expanded
        }
)

AnimatedVisibility 顯示與消失動畫

官方文件有許多進入動畫與離開動畫的展示效果。

語法

1
2
3
4
5
6
7
8
9
10
11
12
13
// 顯示或隱藏
var isVisible by remember { mutableStateOf(false) }
AnimatedVisibility(
  // 顯示或隱藏
  visible = isVisible,
  // 進入動畫
  enter = fadeIn(),
  // 離開動畫
  exit = fadeOut()
) {
	// 要顯示與隱藏的東西
	// 要顯示與隱藏的東西
}

完整程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Composable
fun AnimatedVisibilityExample() {
  var isVisible by remember { mutableStateOf(false) }
  Column {
    Button(onClick = {
      isVisible = !isVisible
    }) {
      Text("Click")
    }
    AnimatedVisibility(
      visible = isVisible,
      enter = fadeIn(),
      exit = fadeOut()
    ) {
      Box(
        modifier = Modifier
          .size(100.dp)
          .background(Color.Blue)
      ) {
        Text("Content")
      }
    }
  }
}

results matching ""

    No results matching ""