23
ActivityTransition Ted

Android Activity Transition(ShareElement)

Embed Size (px)

Citation preview

Page 1: Android Activity Transition(ShareElement)

ActivityTransition

Ted

Page 2: Android Activity Transition(ShareElement)
Page 3: Android Activity Transition(ShareElement)

more about

https://www.youtube.com/watch?v=RhiPJByIMr

M

2:45

Page 4: Android Activity Transition(ShareElement)

step 1

<style name="AppTheme" parent="android:Theme.Material.Light">

<item name="android:windowSharedElementEnterTransition">

@transition/change_image_transform</item>

<item name="android:windowSharedElementExitTransition">

@transition/change_image_transform</item>

</style>

Page 5: Android Activity Transition(ShareElement)

step 2

res/transition/ 加入change_image_transform

<?xml version="1.0" encoding="utf-8"?>

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">

<changeBounds />

<changeImageTransform/>

</transitionSet>

Page 6: Android Activity Transition(ShareElement)

step3Intent intent = new Intent(this,NextActivity.class);

ActivityOptions options = ActivityOptions

.makeSceneTransitionAnimation(this,

Pair.create(event.getView(),

NextActivity.VIEW_NAME));

startActivity(intent, options.toBundle());

Page 7: Android Activity Transition(ShareElement)

final step

img.setTransitionName(VIEW_NAME);

sample code:

https://github.com/nightbear1009/LolipopActivityTransition

Page 8: Android Activity Transition(ShareElement)

what about pre-L

Page 9: Android Activity Transition(ShareElement)
Page 10: Android Activity Transition(ShareElement)

step1

overridePendingTransition(0, 0);

Page 11: Android Activity Transition(ShareElement)

step2

<style name="Transparent" parent="android:Theme.Holo.Light.DarkActionBar">>

<item name="android:windowIsTranslucent">true</item>

<item name="android:windowBackground">@android:color/transparent</item>

</style>

Page 12: Android Activity Transition(ShareElement)

step3

int[] screenLocation = new int[2];

view.getLocationOnScreen(screenLocation);

intent.putExtra("left", screenLocation[0]).

putExtra("top", screenLocation[1]).

putExtra("width", view.getWidth()).

putExtra("height", view.getHeight());

Page 13: Android Activity Transition(ShareElement)

step4

mView.setPivotX(0);

mView.setPivotY(0);

mView.setScaleX(mWidthScale);

mView.setScaleY(mHeightScale);

mView.setTranslationX(mLeftDelta);

mView.setTranslationY(mTopDelta);

Page 14: Android Activity Transition(ShareElement)

step5

mView.animate().setDuration(duration).

scaleX(1).scaleY(1).

translationX(0).translationY(0).

setInterpolator(sDecelerator);

Page 15: Android Activity Transition(ShareElement)
Page 16: Android Activity Transition(ShareElement)

mView.animate().setDuration(duration).

scaleX(mWidthScale).scaleY(mHeightScale).

translationX(mLeftDelta).translationY(mTopDelta);

ObjectAnimator bgAnim = ObjectAnimator.ofFloat(mView, "alpha", 0);

bgAnim.setDuration(duration);

bgAnim.start();

sample code

https://github.com/nightbear1009/ActivityAnimations

Page 17: Android Activity Transition(ShareElement)

the end...

Page 18: Android Activity Transition(ShareElement)

no~ not yet!!

Page 19: Android Activity Transition(ShareElement)

what about transition after http request?

nothing will happen….

what about transition from recyclerview to

recyclerview?

nothing will happen...

Page 20: Android Activity Transition(ShareElement)
Page 21: Android Activity Transition(ShareElement)
Page 22: Android Activity Transition(ShareElement)

postponeEnterTransition();

&

holder.imageView.getViewTreeObserver().addOnPreDrawListener(new

ViewTreeObserver.OnPreDrawListener() {

@Override

public boolean onPreDraw() {

startPostponedEnterTransition();

return true;

}

});

Page 23: Android Activity Transition(ShareElement)

reminder

postponeEnterTransition(); will block ui thread.

所以我們必須將這個activity要顯示的資料從上個activity先帶進來,等到http request 結束之後才換成新的資料

sample code

https://github.com/nightbear1009/LolipopActivityTransition