Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

Compose Animation

Jetpack Compose 애플리케이션에서 애니메이션을 빌드하여 사용자 환경에 풍부함을 더할 수 있습니다.
최근 업데이트 현재 안정화 버전 다음 버전 후보 베타 버전 알파 버전
2020년 9월 16일 - - - 1.0.0-alpha03

구조

Compose는 androidx 내의 Maven 그룹 ID 7개의 조합입니다. 각 그룹에는 타겟팅된 일부 기능이 포함되고 각 기능에는 자체 출시 노트 세트가 있습니다.

다음 표에서는 각 출시 노트 세트에 관한 그룹과 링크를 설명합니다.

그룹설명
compose모양과 데이터 종속 항목을 설명하는 구성 가능 함수를 사용하여 프로그래매틱 방식으로 UI를 정의합니다.
compose.animationJetpack Compose 애플리케이션에서 애니메이션을 빌드하여 사용자 환경에 풍부함을 더하세요.
compose.foundation즉시 사용 가능한 기본 요소를 사용해 Jetpack Compose 애플리케이션을 작성하고 토대를 확장해 나만의 디자인 시스템을 구축하세요.
compose.material즉시 사용 가능한 머티리얼 디자인 구성요소로 Jetpack Compose UI를 빌드하세요. 이는 Compose를 고급 수준에서 사용하는 첫 단계이며, www.material.io에 설명된 것과 동일한 구성요소를 제공합니다.
compose.runtimeCompose의 프로그래밍 모델과 상태 관리용 기본 요소 및 타겟팅용 Compose Compiler Plugin의 핵심 런타임입니다.
compose.ui레이아웃, 그리기, 입력 등 기기와 상호작용할 때 필요한 Compose UI의 기본적인 구성요소입니다.
uiJetpack Compose 라이브러리로 작업합니다.

종속 항목 선언

Compose의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용을 알아보려면 Google Maven 저장소를 읽어보세요.

다음과 같이 앱 또는 모듈의 build.gradle 파일에 필요한 아티팩트의 종속 항목을 추가합니다.

dependencies {
    implementation "androidx.compose.animation:animation:1.0.0-alpha07"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerVersion "1.4.0"
        kotlinCompilerExtensionVersion "1.0.0-alpha07"
    }
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
    kotlinOptions {
        jvmTarget = "1.8"
        freeCompilerArgs += ["-Xallow-jvm-ir-dependencies", "-Xskip-prerelease-check"]
    }
}

종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참조하세요.

의견

제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 만들기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.

새 문제 만들기

자세한 내용은 Issue Tracker 문서를 참조하세요.

버전 1.0.0

버전 1.0.0-alpha03

2020년 9월 16일

androidx.compose.animation:animation:1.0.0-alpha03androidx.compose.animation:animation-core:1.0.0-alpha03이 출시되었습니다. 버전 1.0.0-alpha03에 포함된 커밋을 확인하세요.

버그 수정

  • 레이아웃 API에서 중력 사용에 관한 이름이 align 또는 alignment로 일관성 있게 바뀌었습니다. (I2421a, b/164077038)

버전 1.0.0-alpha02

2020년 9월 2일

androidx.compose.animation:animation:1.0.0-alpha02androidx.compose.animation:animation-core:1.0.0-alpha02가 출시되었습니다. 버전 1.0.0-alpha02에 포함된 커밋을 확인하세요.

API 변경사항

  • 클록에서 프레임을 기다리는 것이 있는지 확인하기 위해 ManualFrameClock.hasAwaiters가 추가되었습니다. ManualFrameClock이 필요한 테스트를 실행할 때 runBlockingrunWithManualClock으로 대체됩니다. TestUiDispatcher.Main으로 테스트에서 기본 UI 디스패처에 쉽게 액세스할 수 있습니다.

    예:

    @Test
    fun myTest() = runWithManualClock { clock ->
        // set some compose content
        withContext(TestUiDispatcher.Main) {
            clock.advanceClock(1000L)
        }
        if (clock.hasAwaiters) {
            println("The clock has awaiters")
        } else {
            println("The clock has no more awaiters")
        }
    }
    

    (I0a85b, b/161247083)

버그 수정

  • onPreCommit이 지원 중단되었습니다. 이제 onCommit에 onPreCommit의 동작이 있습니다.

    이제 onCommit과 onActive가 다음 choreographer 프레임의 시작 부분이 아닌 구성 변경사항이 커밋된 동일한 choreographer 프레임에서 실행됩니다. (I70403)

버전 1.0.0-alpha01

2020년 8월 26일

androidx.compose.animation:animation:1.0.0-alpha01androidx.compose.animation:animation-core:1.0.0-alpha01이 출시되었습니다. 버전 1.0.0-alpha01에 포함된 커밋을 확인하세요.

버전 0.1.0-dev

버전 0.1.0-dev17

2020년 8월 19일

androidx.compose.animation:animation:0.1.0-dev17androidx.compose.animation:animation-core:0.1.0-dev17이 출시되었습니다. 버전 0.1.0-dev17에 포함된 커밋을 확인하세요.

새로운 기능

API 변경사항

  • Offset이 인라인 클래스가 되었습니다. (Iaec70)
  • IntOffset은 이제 인라인 클래스입니다. (Iac0bf)
  • IntSize는 이제 인라인 클래스입니다. (I2bf42)
  • AnimatedVisibilty 컴포저블은 하위 요소 콘텐츠의 표시 및 사라짐을 애니메이션으로 보여줍니다.

    EnterTransition 및 ExitTransition이 도입되어 AnimatedVisibilty 컴포저블과 함께 작동하여 세 가지 유형의 표시 및 사라짐 애니메이션(콘텐츠 페이드, 슬라이드 및 확장/축소)을 제공할 수 있습니다. 다양한 유형의 애니메이션을 조합하여 더욱 맞춤화된 디자인과 분위기를 구현할 수 있습니다. (Idda11)

  • PxBounds가 지원 중단되고 Rect로 대체되었습니다. PxBounds의 모든 사용이 Rect로 업데이트되었으며 이전을 지원하기 위해 적절한 지원 중단/주석으로 대체가 추가되었습니다. (I37038, b/162627058)

버그 수정

  • PlacementScope.placeAbsolute()의 이름이 PlacementScope.place()로 변경되었으며 이전 PlacementScope.place()의 이름은 PlacementScope.placeRelative()로 변경되었습니다. 따라서 PlacementScope.place() 메서드는 더 이상 RTL 컨텍스트의 위치를 자동으로 미러링하지 않습니다. 이를 원한다면 PlacementScope.placeRelative()를 대신 사용해야 합니다. (I873ac, b/162916675)
  • state { ... } 컴포저블이 이제 지원 중단되고 명확성을 위해 명시적 remember { mutableStateOf(...) } 호출로 대체됩니다. 이렇게 하면 전체 API 노출 영역 및 상태 관리를 위한 개념 수가 감소하고 클래스 속성 위임을 위한 by mutableStateOf() 패턴과 일치합니다. (Ia5727)

버전 0.1.0-dev16

2020년 8월 5일

androidx.compose.animation:animation:0.1.0-dev16androidx.compose.animation:animation-core:0.1.0-dev16이 출시되었습니다. 버전 0.1.0-dev16에 포함된 커밋을 확인하세요.

API 변경사항

  • 이제 Foo.VectorConverter를 통해 내장 단위를 변환하는 내장 벡터 변환기에 액세스할 수 있습니다. 예: Dp.VectorConverter, Color.VectorConverter, Float.VectorConverter 등 (I3e273)
  • 크기 변경 애니메이션이 완료되면 애니메이션의 시작/종료 크기와 함께 알림이 리스너에 전송되도록 Modifier.animateContentSize()에서 종료 리스너를 지원합니다. (I277b2)
  • 새로운 animateContentSize 수정자는 하위 요소 수정자의 레이아웃 크기 변경을 애니메이션으로 보여줍니다. (Ieffdc)
  • MonotonicFrameClock을 AnimationClockObservable로 사용할 수 있게 하는 MonotonicFrameAnimationClock을 추가하여 새로운 코루틴 기반 클록과 여전히 이전 콜백 기반 클록을 사용하는 API 간의 간극을 메웠습니다.

    ManualAnimationClock에 상응하는 MonotonicFrameClock은 이제 ManualFrameClock입니다. (I111c7, b/161247083)

버그 수정

  • 오른쪽에서 왼쪽 지원을 위한 API가 업데이트되었습니다. LayoutDirectionAmbient가 추가되어 레이아웃 방향을 읽고 변경하는 데 사용할 수 있습니다. Modifier.rtl 및 Modifier.ltr이 삭제되었습니다. (I080b3)
  • transitionDefinition에 T 유형을 명시적으로 지정해야 합니다. (I1aded)
  • foundation.shape.corner 패키지가 foundation.share로 평면화되었습니다. (I46491, b/161887429)
  • Modifier.plus가 지원 중단되었습니다. 대신 Modifier.then을 사용해야 합니다. 'then'은 더 강력한 순서 지정 신호를 가지고 있지만 체인을 끊으며 읽기가 더 어려운 Modifier.padding().background() + anotherModifier 입력도 금지합니다. (Iedd58, b/161529964)
  • Modifier.drawBackground 이름을 Modifier.background로 바꿨습니다. (I13677)

버전 0.1.0-dev15

2020년 7월 22일

androidx.compose.animation:animation:0.1.0-dev15androidx.compose.animation:animation-core:0.1.0-dev15가 출시되었습니다. 0.1.0-dev15에 포함된 커밋을 확인하세요.

종속 항목 업데이트

  • Compose의 0.1.0-dev15 버전을 사용하려면 위의 종속 항목 선언에 표시된 새로운 코드 스니펫에 따라 종속 항목을 업데이트해야 합니다.

API 변경사항

  • TransitionState를 하위 요소에 전달하는 대신 TransitionState를 반환하도록 Transition API가 변경되었습니다. 이렇게 하면, API와 animate() API의 일관성이 더 높아집니다. (I24e38)
  • Crossfade를 위한 수정자 매개변수가 추가되었습니다. (I87cfe, b/129706180)
  • 정적 애니메이션 사양 개념을 명확히 나타내려면 최상위 API에서 AnimationBuilder 대신 AnimationSpec을 사용하세요.
    • 트윈, 스프링 같은 AnimationSpec을 만드는 데 필요한 람다 요구사항이 필요 없게 되어 전환 DSL이 개선됩니다. 대신 생성자 매개변수를 직접 사용합니다.
    • 빌더에 의존하는 대신 생성자를 여는 AnimationSpec의 사용 편의성이 전반적으로 향상됩니다.
    • KeyFrames와 Tween의 재생 시간과 지연이 Int로 변경됩니다. 이를 통해 불필요한 유형 변환 및 메서드 오버로드가 사라집니다(Long과 Int를 모두 지원하는 경우). (Ica0b4)
  • IntPx 사용을 Int로 대체했습니다. IntPxPosition은 IntOffset으로 대체했습니다. IntPxSize를 IntSize로 대체했습니다. (Ib7b44)
  • 크기 정보를 표시하는 데 사용되는 클래스의 수를 통합하려면 PxSize 대신 Size 클래스 사용을 표준화합니다. 이렇게 하면 인라인 클래스의 이점을 제공하여 부동 소수점으로 표시된 너비와 높이를 나타내는 long-pack 2 부동 소수점 값을 활용할 수 있습니다. (Ic0191)
  • 위치 정보를 나타내는 데 사용되는 클래스 수를 통합하려면 PxPosition 대신 Offset 클래스 사용을 표준화합니다. 이렇게 하면, 인라인 클래스의 이점을 제공하여 부동 소수점으로 표시된 x 및 y 오프셋을 나타내는 long-pack 2 부동 소수점 값을 활용할 수 있습니다. (I3ad98)
  • 대규모 리팩터링 작업의 일환으로 여러 컴포즈 클래스에서 Px 클래스가 더 이상 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 기본 유형만 사용됩니다. (I086f4)
  • Dp, Px, Size, Position, Bounds, PxPosition, PxSize, PxBounds, IntPx, IntPxSize, IntPxPosition, IntPxBounds, AnimationVector를 위한 animate() 지원이 추가되었습니다. (Ib7518)
  • 이제 Crossfade가 애니메이션을 구성할 수 있도록 선택적 AnimationBuilder 매개변수를 허용합니다. (I6d6e0)
  • API의 모든 null을 허용하는 Color 사용을 null을 허용하지 않는 것으로 대체했습니다. null 대신 Color.Unset을 사용하세요. (Iabaa7)
  • ValueHolder 클래스가 삭제되었습니다. 애니메이션 값 필드를 추상적으로 만들어 서브클래스에 값 업데이트가 표시될 수 있도록 AnimatedValue 및 AnimatedFloat 클래스를 재구성했습니다.
    • AnimatedValue, AnimatedFloat 등의 모델 클래스가 추가되었습니다.
    • 값 사이에 애니메이션을 적용하기 위한 새로운 경량 @Composable API 세트를 추가했습니다. (I79530)
  • ambients API에 브레이킹 체인지가 있습니다. 자세한 내용은 로그와 Ambient<T> 문서를 참조하세요. (I4c7ee, b/143769776)
  • 새로운 반복 모드: 리버스. 이 모드는 애니메이션이 RepeatableSpec 또는 VectorizedRepeatableSpec에서 반복될 경우 이전 반복을 역방향으로 진행시킵니다. (Ibe0f5)
  • ManualAnimationClock에 API 추가: hasObservers: Boolean 및 생성자 매개변수 dispatchOnSubscribe: Boolean (Iaa134)
  • AnimatedFloat에서 min/max 경계를 가져오기 위한 API를 추가했습니다. (Icd9cc)

버그 수정

  • runOnIdleCompose 이름을 runOnIdle로 바꿨습니다. (I83607)
  • 여러 테스트 API의 이름이 더 직관적으로 바뀌었습니다. 모든 findXYZ API의 이름이 onNodeXYZ로 바뀌었습니다. 모든 doXYZ API의 이름이 performXYZ로 바뀌었습니다. (I7f164)
  • 낮은 수준의 스테이트리스(Stateless) 애니메이션 API가 도입되었습니다. (I63bf7)
  • Recompose 컴포저블은 더 이상 유용한 추상화가 아닙니다. 대부분의 재구성은 MutableState 할당의 결과로 발생해야 합니다. 그 외의 경우에는 invalidate 함수를 사용하여 현재 범위의 재구성을 트리거하는 것이 좋습니다. (Ifc992)
  • 여러 컴포즈 클래스에서 Px 클래스가 더 이상 대규모 리팩터링 작업의 일부로 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 기본 유형만 사용됩니다. Px 클래스 전체가 삭제되었습니다. (I3ff33)
  • 여러 컴포즈 클래스에서 Px 클래스가 더 이상 대규모 리팩터링 작업의 일부로 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 기본 유형만 사용됩니다. (Id3434)
  • 이제 Crossfade가 null을 초기 값으로 사용할 수 있습니다. (Iad6a4, b/155947711)
  • 여러 컴포즈 클래스에서 Px 클래스가 더 이상 대규모 리팩터링 작업의 일부로 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 기본 유형만 사용됩니다. (I19d02)
  • CanvasScope 구현이 통합되어 이제 DrawScope와 ContentDrawScope만 있습니다. CanvasScope 이름을 DrawScope로 바꿨습니다. Density 인터페이스를 구현하고 LayoutDirection을 제공하도록 DrawScope를 업데이트했습니다. ContentDrawScope의 DrawScope 서브클래스를 삭제했습니다. Painter 및 PainterModifier가 RTL 속성을 더 이상 자체적으로 유지하지 않도록 업데이트되었습니다. RTL 속성을 수동으로 제공하지 않아도 DrawScope가 이미 이 속성을 제공하기 때문입니다. (I1798e)
  • 캔버스를 노출하여 CanvasScope를 대신 노출하는 상위 수준 Compose API를 업데이트했습니다. 따라서 소비자가 자체 Paint 객체를 유지하지 않아도 됩니다. 캔버스에 계속 액세스해야 하는 소비자의 경우 콜백을 제공하여 기본 캔버스에서 그리기 명령어를 실행하는 drawCanvas 확장 메서드를 사용하면 됩니다. (I80afd)
  • Row와 Column에 각각 verticalGravity 및 horizontalGravity 매개변수를 추가했습니다. (I7dc5a)
  • ui-text 모듈의 이름이 ui-text-core로 변경되었습니다. (I57dec)
  • 다음과 같이 DrawModifier API가 개선됩니다.
    • 수신기 범위를 draw() ContentDrawScope로 설정했습니다.
    • draw()의 모든 매개변수를 삭제했습니다.
    • DrawScope는 이전 CanvasScope와 동일한 인터페이스를 사용합니다.
    • ContentDrawScope에 drawContent() 메서드가 있습니다. (Ibaced, b/152919067)
  • 이제 runOnIdleComposerunOnUiThread는 ComposeTestRule의 메서드가 아닌 전역 함수입니다. (Icbe8f)
  • [변경 가능] 주 속성 위임 연산자가 Kotlin 1.4 속성 위임 최적화를 지원하기 위해 확장 프로그램으로 이동했습니다. by state { ... } 또는 by mutableStateOf(...)를 계속 사용하려면 호출자가 가져오기를 추가해야 합니다. (I5312c)
  • ColoredRect가 지원 중단되었습니다. 대신 Box(Modifier.preferredSize(width, height).drawBackground(color))를 사용하세요. (I499fa, b/152753731)
  • 수정자 + 연산자를 팩토리 확장 함수로 대체했습니다. (I225e4)
  • Center 컴포저블을 지원 중단했습니다. LayoutSize.Fill + LayoutAlign.Center 수정자로 대체되거나 적절한 수정자가 적용된 Box 또는 Stack 컴포저블 중 하나로 대체됩니다. (Idf5e0)
  • LayoutFlexible을 LayoutWeight로 이름을 변경했습니다. 채우기 위해 긴 매개변수의 이름을 변경했습니다. (If4738)
  • 불투명도 구성 가능한 함수를 drawOpacity 수정자로 대체했습니다. (I5fb62)
  • AndroidComposeTestRule을 사용한 테스트가 이제 수동 일시중지, 계속, 진행을 허용하는 애니메이션 클록을 구성 루트에서 제공합니다. (Id54c5)
  • LayoutPadding 수정자의 오른쪽에서 왼쪽 방향을 지원합니다. (I9e8da)
  • Density와 DensityScope를 하나의 인터페이스로 병합했습니다. 이제 ambientDensity() 대신 DensityAmbient.current를 사용할 수 있으며 withDensity(density) 대신 with(density)를 사용하면 됩니다. (I11cb1)
  • 다음과 같은 다양한 인라인 클래스 유형에 복사 메서드를 추가했습니다.
    • 오프셋
    • 크기
    • 반경
    • 모션
    • TransformOrigin
    • Size.copy 컴패니언 객체 메서드가 지원 중단되고 인스턴스 복사 메서드로 대체되었습니다. (Ife290, b/159905651)
  • androidx.compose.ViewComposer가 androidx.ui.node.UiComposer로 이동했습니다. androidx.compose.Emittable은 삭제되었습니다. 이 항목은 ComponentNode와 중복되었습니다. androidx.compose.ViewAdapters는 삭제되었습니다. 더 이상 지원되지 않는 사용 사례입니다. Compose.composeInto가 지원 중단되었습니다. 대신 setContent 또는 setViewContent를 사용하세요. Compose.disposeComposition이 지원 중단되었습니다. 대신 setContent에서 반환되는 Composition에서 dispose 메서드를 사용하세요. androidx.compose.Compose.subcomposeInto를 androidx.ui.core.subcomposeInto로 이동했습니다. ComponentNode#emitInsertAt의 이름이 ComponentNode#insertAt로 변경되었습니다. ComponentNode#emitRemoveAt의 이름이 ComponentNode#removeAt로 변경되었습니다. ComponentNode#emitMode의 이름이 ComponentNode#move로 변경되었습니다. (Idef00)