programing

Android에서의 활동 전환

newsource 2023. 9. 2. 08:31

Android에서의 활동 전환

Android 1.5 이상에서 두 활동 간의 전환을 어떻게 정의할 수 있습니까?활동이 희미해졌으면 좋겠습니다.

다음은 두 활동 간에 원활한 페이드를 수행하는 코드는 다음과 같습니다.

는 파일을 .fadein.xmlres/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.xmlres/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 리소스 파일에서 간단한 전환 애니메이션을 정의할 수 있습니다.

간단한 방법은 다음과 같습니다.

  1. styles.xml 파일에 애니메이션 스타일을 만듭니다.
<style name="WindowAnimationTransition">
    <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
    <item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
  1. 앱 테마에 이 스타일 추가
<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_outAPI 레벨 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;

여기 두 활동 사이를 원활하게 하기 위한 코드가 있습니다.

  1. 왼쪽에서 오른쪽으로 매끄러운 효과

    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>
    
  2. 오른쪽에서 왼쪽으로 매끄러운 효과

    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>
    
  3. 한 활동에서 두 번째 활동으로 이동

       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 장치:

설정 > 개발자 옵션을 사용하여 단말기에서 전원을 끄지 않았는지 확인해야 합니다.

two muppets

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