PreLollipopTransition

Additional

Language
Java
Version
1.3.3 (Dec 11, 2016)
Created
Mar 25, 2015
Updated
Apr 29, 2017 (Retired)
Owner
Takahiro Menju (takahirom)
Contributors
Takahiro Menju (takahirom)
Yoshinori Isogai (shiraji)
Joe (lovejjfg)
Dani Mahardhika (danimahardhika)
4
Activity
Badge
Generate
Download
Source code

PreLollipopTransition

Simple tool which help you to implement activity and fragment transition for pre-Lollipop devices.

Download

In your app build.gradle add

dependencies {
    compile 'com.kogitune:pre-lollipop-activity-transition:1.x.x'
}

Code

Activity

Start Activity in first activity.

findViewById(R.id.imageView).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        final Intent intent = new Intent(MainActivity.this, SubActivity.class);
        ActivityTransitionLauncher.with(MainActivity.this).from(v).launch(intent);
    }
});

Receive intent in second activity.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sub);
    ActivityTransition.with(getIntent()).to(findViewById(R.id.sub_imageView)).start(savedInstanceState);
}

If you want the exit animation, you can do like this.

private ExitActivityTransition exitTransition;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sub2);
    exitTransition = ActivityTransition.with(getIntent()).to(findViewById(R.id.sub_imageView)).start(savedInstanceState);
}
@Override
public void onBackPressed() {
    exitTransition.exit(this);
}

If you want to use startActivityForResult, you should do below.

  1. Use createBundle().
  2. Put Extra to intent.
  3. Call overridePendingTransition after startActivityForResult.
Bundle transitionBundle = ActivityTransitionLauncher.with(MainActivity.this).from(v).createBundle();
intent.putExtras(transitionBundle);
startActivityForResult(intent, REQUEST_CODE);
// you should prevent default activity transition animation
overridePendingTransition(0, 0);

Fragment

Start fragment transition in first fragment.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.support_fragment_start, container, false);
    v.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            final EndFragment toFragment = new EndFragment();
            FragmentTransitionLauncher
                    .with(view.getContext())
                    .image(BitmapFactory.decodeResource(getResources(), R.drawable.photo))
                    .from(view.findViewById(R.id.imageView)).prepare(toFragment);
            getFragmentManager().beginTransaction().replace(R.id.content, toFragment).addToBackStack(null).commit();
        }
    });
    return v;
}

Start animation in second fragment.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.support_fragment_end, container, false);
    final ExitFragmentTransition exitFragmentTransition = FragmentTransition.with(this).to(v.findViewById(R.id.fragment_imageView)).start(savedInstanceState);
    exitFragmentTransition.startExitListening();
    return v;
}

If you want to pass argument to second fragment, you should use Fragment#getArguments() after call prepare().

final EndFragment toFragment = new EndFragment();
FragmentTransitionLauncher
        .with(view.getContext())
        .image(BitmapFactory.decodeResource(getResources(), R.drawable.photo))
        .from(view.findViewById(R.id.imageView)).prepare(toFragment);
toFragment.getArguments().putString("stringArgKey", "this is value");
getFragmentManager().beginTransaction().replace(R.id.content, toFragment).addToBackStack(null).commit();

Sample

Contributors

Thanks

Sample Photo Luke Ma https://www.flickr.com/photos/lukema/12499338274/in/photostream/

DevBytes: Custom Activity Animations https://www.youtube.com/watch?v=CPxkoe2MraA

License

This project is released under the Apache License, Version 2.0.