Are Activity/Fragment Transitions compatible with pre-Lollipop devices?

18,227

Solution 1

No, Activity/Fragment Transitions are not possible on pre-Lollipop devices. According to the documentation:

Start an activity with additional launch information, if able.

In Android 4.1+ additional options were introduced to allow for more control on activity launch animations. Applications can use this method along with ActivityOptionsCompat to use these animations when available. When run on versions of the platform where this feature does not exist the activity will be launched normally.

See also George Mount's answer to this StackOverflow question.

Solution 2

You can check out this library for activity and fragment transitions for pre lollipop devices

dependencies {
        compile 'com.albinmathew:PreLollipopTransition:1.1.2'
}

https://github.com/albinmathew/PreLollipopTransition

Solution 3

Although the fancy Lollipop Activity/Fragment transitions are not available pre-Lollipop (without the use of a 3rd party library), you can still override the animation used to transition between activities.

Just before/after you start invoke startActivity() you can make a call to [Activity.overridePendingTransition](http://developer.android.com/reference/android/app/Activity.html#overridePendingTransition(int, int)). When you leave your activity, call the same method.

Similarly you can use ActivityOptionsCompat to define a custom animation to use during a transition.

ActivityOptionsCompat opts =
    ActivityOptionsCompat.makeCustomAnimation(getActivity(), R.anim.in, R.anim.out);
startActivity(intent, opts.toBundle());

Solution 4

There is a support library, but it does not support (all) transitions on Android versions below 5.0. There are however some alternatives:

Unofficial Compatibility libraries
https://github.com/andkulikov/transitions-everywhere
https://github.com/takahirom/PreLollipopTransition
https://github.com/lgvalle/Material-Animations

Android KitKat
http://www.doubleencore.com/2013/11/new-transitions-framework/ and a sample found in your SDK samples folder.

Posted earlier to a duplicate of this question here: https://stackoverflow.com/a/27344471/1683141

Share:
18,227
Cheborra
Author by

Cheborra

Updated on June 12, 2022

Comments

  • Cheborra
    Cheborra about 2 years

    I'm trying to make an Activity Transition using Shared Elements on a pre-Lollipop device (4.x). Is it possible? So far, I'm trying this:

    public class RewardDetail extends ActionBarActivity {
        @Override
        public void onCreate(final Bundle savedInstanceState) {
            ...
    
            ViewCompat.setTransitionName(imageView, TRANSITION_NAME);
        }
    
        ...
    
        public static void launch(ActionBarActivity activity, View transitionView, WelcomeReward detailData) {
            ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionView, TRANSITION_NAME);
            Intent intent = new Intent(activity, RewardDetail.class);
            intent.putExtra(PARAM_DATA, detailData);
            ActivityCompat.startActivity(activity, intent, options.toBundle());
        }
    }
    

    called by:

    @Override
    public void onClick(final View v) {
        int position = recyclerView.getChildPosition(v);
        WelcomeReward welcomeReward = data.get(position);
        RewardDetail.launch(WelcomeRewardActivity.this, v.findViewById(R.id.reward_view), welcomeReward);
    }
    

    But it results in a "regular" transition (no shared element). Any ideas?

    EDIT

    According to this video, it could be done:

    https://www.youtube.com/watch?v=RhiPJByIMrM&index=8&list=WL

    Is there a library already implementing this for pre Lollipop ?