뷰 애니메이션

보기 애니메이션 시스템을 사용하여 보기에서 트윈 애니메이션을 실행할 수 있습니다. 트윈 애니메이션 는 시작 지점, 종료 지점, 크기, 회전 및 다른 일반적인 측면에 대해서도 다룹니다.

트윈 애니메이션은 일련의 간단한 변환 (위치, 크기, 회전, 및 투명도)를 설정할 수 있습니다. 따라서 TextView 객체가 있으면 텍스트를 이동, 회전, 증가 또는 축소시킬 수 있습니다. 만약 배경 이미지인 경우 배경 이미지는 텍스트와 함께 변환됩니다. animation package에서는 트윈 애니메이션에서 사용되는 모든 클래스를 제공합니다.

일련의 애니메이션 명령어는 XML 또는 Android 코드 레이아웃을 정의할 때처럼, XML 파일은 더 읽기 쉽고 교체가 가능하기 때문에 재사용이 가능합니다. 아래 예에서는 XML을 사용합니다. (받는사람 XML 대신 애플리케이션 코드에서 애니메이션을 정의하는 방법에 관한 자세한 내용은 AnimationSet 클래스 및 기타 Animation 서브클래스).

애니메이션 지침에 따라 수행하려는 변환을 정의하고 발생하는 데 걸리는 시간을 확인할 수 있습니다 변환은 순차적이거나 동시적일 수 있음 - 예를 들어 TextView의 콘텐츠를 왼쪽에서 오른쪽으로 이동한 다음 180도 또는 텍스트를 동시에 이동 및 회전할 수 있습니다. 각 변환은 해당 변환에 적용되는 매개변수 집합 (크기의 시작 크기 및 종료 크기) , 회전의 시작 각도 및 종료 각도 등), 그리고 공통된 집합 매개변수 (예: 시작 시간 및 소요 시간)를 지정합니다. 여러 가지 변환을 수행하기 위해 동일한 시작 시간을 지정합니다. 순차적으로 만들려면 시작 시간을 계산하세요 이전 변환 기간을 더한 값입니다.

애니메이션 XML 파일은 Android의 res/anim/ 디렉터리에 있습니다. 살펴보겠습니다 파일에는 단일 루트 요소가 있어야 합니다. 이 요소는 단일 <alpha>, <scale>, <translate> <rotate>, 보간기 요소 또는 <set> 요소를 사용하여 이 요소의 그룹 (다른 <set>가 포함될 수 있음) 기본적으로 모든 동시에 적용됩니다. 순차적으로 발생하게 하려면 아래 예와 같이 startOffset 속성을 지정해야 합니다.

ApiDemos 중 하나에서 다음 XML을 사용하여 스트레칭하고 동시에 회전 및 뷰 객체를 회전할 수 있습니다.

<set android:shareInterpolator="false">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="700" />
    <set android:interpolator="@android:anim/decelerate_interpolator">
        <scale
           android:fromXScale="1.4"
           android:toXScale="0.0"
           android:fromYScale="0.6"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400"
           android:fillBefore="false" />
        <rotate
           android:fromDegrees="0"
           android:toDegrees="-45"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400" />
    </set>
</set>

화면 좌표 (이 예에서는 사용되지 않음)는 왼쪽 상단 모서리에 있는 (0,0)입니다. 증가하기만 하면 됩니다.

pivotX 같은 일부 값은 객체 자체 또는 있습니다. 원하는 내용에 적합한 형식을 사용하세요(상위 요소를 기준으로 50% 인 경우 '50', 또는 '50%' 50%).

Interpolator를 할당하여 시간에 따른 변환 적용 방법을 판별할 수 있습니다. Android에는 여러 Interpolator 서브클래스가 포함되어 있습니다. 다양한 속도 곡선 지정(예: AccelerateInterpolator) 변환이 천천히 시작해서 속도를 높이도록 지시합니다 각각은 특성 값을 가지며 적용됩니다.

이 XML은 res/anim/hyperspace_jump.xml로 저장됩니다. 디렉터리가 있는 경우 다음 코드는 이 디렉터리를 참조하고 레이아웃의 ImageView 객체에 적용합니다.

Kotlin

AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump).also { hyperspaceJumpAnimation ->
    findViewById<ImageView>(R.id.spaceshipImage).startAnimation(hyperspaceJumpAnimation)
}

자바

ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);

startAnimation()의 대안으로 Animation.setStartTime()로 애니메이션을 만들고 View.setAnimation()를 사용하여 뷰에 애니메이션을 할당합니다.

XML 구문, 사용 가능한 태그 및 속성에 관한 자세한 내용은 애니메이션 리소스를 참조하세요.

참고: 애니메이션이 이동하거나 크기가 조절되는 방식과 관계없이 애니메이션이 포함된 View의 경계가 이에 맞게 자동으로 조정되지 않습니다. 그래도 애니메이션은 여전히 보기의 경계를 벗어나 그려지며 잘리지 않습니다/ 그러나 애니메이션이 상위 View의 경계를 초과하면 자르기가 발생합니다.