애니메이션을 통해 활동에서 조각 바꾸기


94

애니메이션을 통해 활동에서 두 조각을 바꾸고 싶습니다. PageA는 조각 A 용이고 화면의 왼쪽은 페이지 B는 조각 B 즉 화면의 오른쪽에 있다고 가정합니다. 이제 pageA의 버튼을 클릭하면 PageA가 일부 전환 애니메이션과 함께 화면의 오른쪽으로 이동합니다.

위치를 바꾸기 위해 아래 코드를 시도했습니다.

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container, new FragB());
fragmentTransaction.commit();

단서를 찾고 있습니다.

미리 감사드립니다.


답변:


282

오래된 질문과 아마 이미 알아 냈을 것입니다.

코드를 통해 조각을 바꿀 때 사용자 지정 애니메이션을 설정하는 데 사용하는 방법은 다음과 같습니다.

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
ft.replace(R.id.fragment_container, newFragment, "fragment");
// Start the animated transition.
ft.commit();

다음은 slide_in_left 애니메이션의 예입니다.

<?xml version="1.0" encoding="utf-8"?>
<set>
  <translate xmlns:android="http://schemas.android.com/apk/res/android"
   android:fromXDelta="-100%"
   android:toXDelta="0"
   android:interpolator="@android:anim/decelerate_interpolator"
   android:duration="500"/>
</set>

호환성 라이브러리를 사용하는 경우 이것은 애니메이션입니다. 대신 FragmentManager에 대한 기본 지원과 함께 SDK를 사용하는 경우 애니메이션은 다음과 같이 표시됩니다.

<?xml version="1.0" encoding="utf-8"?>
<set>
  <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="x" 
    android:valueType="floatType"
    android:valueFrom="-1280"
    android:valueTo="0" 
    android:duration="500"/>
</set>

이는 호환성 라이브러리가 새 objectAnimator 유형을 지원하지 않고 대신 이전 애니메이션 프레임 워크 만 구현하기 때문입니다.


92
이것은 확실히 정답입니다. 순서가 중요합니다! add / replace 호출 전에 setCustomAnimations () 호출이 필요합니다!
theelfismike

2
그렇다면 최상의 광고를 원한다면 어떤 접근 방식을 사용해야합니까?
basickarl 2013-09-24

17
이러한 다른 애니메이션은 정확히 동일하지 않습니다. -1280의 valueFrom을 사용하여 조각의 너비가 1280과 같다고 가정합니다. 너비가 더 크면 화면에서 완전히 시작되지 않습니다.
egfconnor

53
U는 Android 네임 스페이스에서 미리 정의 된 애니메이션을 대신 사용할 수 있습니다. transaction.setCustomAnimations (android.R.anim.slide_in_left, android.R.anim.slide_out_right);
Jordy

2
미리 정의 된 애니메이션은 "translate"태그에 의존하기 때문에 런타임 예외 FWIW를 트리거합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.