Skip to content

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

Notifications You must be signed in to change notification settings

takahirom/PreLollipopTransition

Folders and files

NameName
Last commit message
Last commit date

Latest commit

90c6e12 · Apr 29, 2017
Nov 26, 2016
Apr 6, 2017
Apr 6, 2017
Apr 6, 2017
Nov 26, 2016
Nov 1, 2015
Dec 11, 2016
Apr 28, 2017
Apr 29, 2017
Nov 26, 2015
Mar 25, 2015
Mar 25, 2015
Nov 26, 2015

Repository files navigation

PreLollipopTransition

build status API

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

prelollipopanimation

Download

In your app build.gradle add

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

Download

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

image

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.