Android에서의 활동 전환
Android 1.5 이상에서 두 활동 간의 전환을 어떻게 정의할 수 있습니까?활동이 희미해졌으면 좋겠습니다.
다음은 두 활동 간에 원활한 페이드를 수행하는 코드는 다음과 같습니다.
는 파일을 .fadein.xml
res/anim
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="2000" />
는 파일을 .fadeout.xml
res/anim
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="2000" />
활동 A에서 활동 B로 페이드하려면 다음을 입력합니다.onCreate()
활동 B를 위한 방법.전에setContentView()
저한테는 효과가 있어요.
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
합니다.android:duration
위의 xml 파일에서 더 작은 것으로.
를 사용하여 이 작업을 수행할 수 있습니다. XML 리소스 파일에서 간단한 전환 애니메이션을 정의할 수 있습니다.
간단한 방법은 다음과 같습니다.
- styles.xml 파일에 애니메이션 스타일을 만듭니다.
<style name="WindowAnimationTransition"> <item name="android:windowEnterAnimation">@android:anim/fade_in</item> <item name="android:windowExitAnimation">@android:anim/fade_out</item> </style>
- 앱 테마에 이 스타일 추가
<style name="AppBaseTheme" parent="Theme.Material.Light.DarkActionBar"> <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item> </style>
바로 그거야 :)
예. OS에 작업을 위해 어떤 전환을 원하는지 알려줄 수 있습니다.
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().setWindowAnimations(ANIMATION);
...
}
여기서 ANIMATION은 OS에 내장된 애니메이션을 가리키는 정수입니다.
기본 애니메이션 목록은 http://developer.android.com/reference/android/R.anim.html 을 참조하십시오.
은 로있습다니제실▁in가 있습니다.fade_in
그리고.fade_out
API 레벨 1 이상입니다.
create res>anim>sysin.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" />
create res>anim>sysout.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
Inres>values>styles.xml
<style name="Fade">
<item name="android:windowEnterAnimation">@anim/fadein</item>
<item name="android:windowExitAnimation">@anim/fadeout</item>
</style>
만들기()에 대한 활동 중
getWindow().getAttributes().windowAnimations = R.style.Fade;
여기 두 활동 사이를 원활하게 하기 위한 코드가 있습니다.
왼쪽에서 오른쪽으로 매끄러운 효과
res/anim에서 slide_in_right.xml 및 slide_out_right.xml이라는 파일을 만듭니다.
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <translate android:duration="5000" android:fromXDelta="100%" android:toXDelta="0%" /> <alpha android:duration="5000" android:fromAlpha="0.0" android:toAlpha="1.0" /> </set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <translate android:duration="5000" android:fromXDelta="0%" android:toXDelta="-100%"/> <alpha android:duration="5000" android:fromAlpha="1.0" android:toAlpha="0.0" /> </set>
오른쪽에서 왼쪽으로 매끄러운 효과
res/anim에 animation_enter.xml 및 animation_leave.xml이라는 파일을 만듭니다.
animation_enter.xml
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="-100%" android:toXDelta="0%" android:fromYDelta="0%" android:toYDelta="0%" android:duration="700"/> </set>
animation_leave.xml
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="0%" android:toXDelta="100%" android:fromYDelta="0%" android:toYDelta="0%" android:duration="700" /> </set>
한 활동에서 두 번째 활동으로 이동
Intent intent_next=new Intent(One_Activity.this,Second_Activity.class); overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_right); startActivity(intent_next); finish();
4. 이벤트를 뒤로 누르거나 두 번째 활동에서 하나의 활동으로 이동합니다.
Intent home_intent = new Intent(Second_Activity.this, One_Activity.class); overridePendingTransition(R.anim.animation_enter, R.anim.animation_leave); startActivity(home_intent); finish();
Android 1.5에서는 Pending Transition을 재정의할 수 없습니다. Android 2.0에서는 Pending Transition을 재정의할 수 있습니다.
오류 없이 이 작업을 수행하려면 일반 애니메이션(또는 사용자 소유)을 사용하여 대상(1.5 이상)에 대해 컴파일하거나 PendingTransition을 재정의하여 대상(2.0 이상)에 대해 컴파일해야 합니다.
요약:.Android 1.5에서는 PendingTransition을 재정의하는 기능을 사용할 수 없습니다.
하지만 당신은 OS에 내장된 애니메이션을 사용할 수 있습니다.
의도를 시작하기 전에:
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(AlbumListActivity.this);
startActivity(intent, options.toBundle());
그러면 활동 전환에 기본 애니메이션이 제공됩니다.
GALAXY 장치:
설정 > 개발자 옵션을 사용하여 단말기에서 전원을 끄지 않았는지 확인해야 합니다.
ActivityCompat.startActivity() 사용 API > 21.
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE);
ActivityCompat.startActivity(activity, intent, options.toBundle());
애니메이션 확대
Intent i = new Intent(getApplicationContext(), LoginActivity.class);
overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
startActivity(i);
finish();
줌인
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="500" />
확대축소
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:fillAfter="true"
android:duration="500" />
Android 일부 버전은 사용자 지정을 지원합니다.Activity
일부는 그렇지 않습니다(구형 장치).사용자 지정 전환을 사용하려면 다음과 같은 작업을 수행하는지 확인하는 것이 좋습니다.Activity
을 가지고 있습니다.overridePendingTransition()
이전 버전에서는 그렇지 않은 메서드입니다.
메소드의 존재 여부를 알기 위해 리플렉션 API를 사용할 수 있습니다.메서드가 존재할 경우 확인하고 반환하는 간단한 코드는 다음과 같습니다.
Method mOverridePendingTransition;
try {
mOverridePendingTransition = Activity.class.getMethod(
"overridePendingTransition", new Class[] { Integer.TYPE, Integer.TYPE } );
/* success */
} catch (NoSuchMethodException nsme) {
/* failure, this version of Android doesn't have this method */
}
그런 다음 자체 전환을 적용할 수 있습니다. 즉, 다음과 같은 방법을 사용할 수 있습니다.
if (UIConstants.mOverridePendingTransition != null) {
try {
UIConstants.mOverridePendingTransition.invoke(MainActivity.this, R.anim.activity_fade_in, R.anim.activity_fade_out);
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
여기서는 전환 시연을 위해 간단한 페이드인 및 페이드아웃 애니메이션을 사용했습니다.
언급URL : https://stackoverflow.com/questions/3389501/activity-transition-in-android
'programing' 카테고리의 다른 글
팬더 또는 다른 파이썬 모듈로 특정 열 읽기 (0) | 2023.09.02 |
---|---|
이미지 보기와 텍스트 보기가 포함된 선형 레이아웃 대신 복합 그리기 가능한 테이블을 사용하는 방법 (0) | 2023.09.02 |
Mysql2 분할 오류 ubuntu22.04 (0) | 2023.09.02 |
sin_addr을 수행합니다.s_addr = INADDR_ANY; httonl이 필요합니까? (0) | 2023.09.02 |
Jquery - 스타일 표시 속성 "없음 / 블럭"을 가져오는 방법 (0) | 2023.09.02 |