Last active
April 9, 2018 16:58
-
-
Save kotoMJ/57e3804d54b617ce9888d57379155c59 to your computer and use it in GitHub Desktop.
Animate activity sliding right to left.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class MySlideActivity: AppCompatActivity(){ | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
setupWindowSlideTransitions(window, resources) | |
} | |
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) { | |
super.onCreate(savedInstanceState, persistentState) | |
setupWindowSlideTransitions(window, resources) | |
} | |
/** | |
* setupWindowSlideTransition must be called before adding content! | |
* | |
* Using Gravity.START is a problem that crashes on API 21 devices. | |
* The reason is that the initial version of Slide in API 21 only supports LEFT,TOP,RIGHT and BOTTOM gravity's. | |
* That's why here is used GravityCompat for that. | |
*/ | |
fun setupWindowSlideTransitions(window: Window, resources: Resources) { | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { | |
//request transition here, or in AndroidManifest.xml | |
window.requestFeature(Window.FEATURE_CONTENT_TRANSITIONS) | |
window.exitTransition = Slide(GravityCompat.getAbsoluteGravity(GravityCompat.START, resources.configuration.layoutDirection)).excludeTarget(Window.NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME, true) | |
window.enterTransition = Slide(GravityCompat.getAbsoluteGravity(GravityCompat.END, resources.configuration.layoutDirection)).excludeTarget(Window.NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME, true) | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const val REQUEST_NEXT_STEP: Int = 20 | |
class MySlideActivity: AppCompatActivity(){ | |
override fun onClick() { | |
startForResultAnimate<MySlideActivity>(REQUEST_NEXT_STEP) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.content.res.Resources | |
import android.os.Build | |
import android.support.v4.view.GravityCompat | |
import android.transition.Slide | |
import android.view.Window | |
/** | |
* setupWindowSlideTransition must be called before adding content! | |
* | |
* Using Gravity.START is a problem that crashes on API 21 devices. | |
* The reason is that the initial version of Slide in API 21 only supports LEFT,TOP,RIGHT and BOTTOM gravity's. | |
* That's why here is used GravityCompat for that. | |
*/ | |
fun setupWindowSlideTransitions(window: Window, resources: Resources) { | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { | |
//request transition here, or in AndroidManifest.xml | |
window.requestFeature(Window.FEATURE_CONTENT_TRANSITIONS) | |
window.exitTransition = Slide(GravityCompat.getAbsoluteGravity(GravityCompat.START, resources.configuration.layoutDirection)).excludeTarget(Window.NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME, true) | |
window.enterTransition = Slide(GravityCompat.getAbsoluteGravity(GravityCompat.END, resources.configuration.layoutDirection)).excludeTarget(Window.NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME, true) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.annotation.TargetApi | |
import android.app.Activity | |
import android.content.Intent | |
import android.content.pm.ActivityInfo | |
import android.os.Build | |
import android.support.annotation.ColorInt | |
import android.support.annotation.ColorRes | |
import android.support.v4.app.ActivityOptionsCompat | |
import android.support.v4.content.ContextCompat | |
import android.view.View | |
import android.view.WindowManager | |
inline fun <reified A : Activity> Activity.startForResultAnimate(requestCode: Int) = startActivityForResult(Intent(this, A::class.java), requestCode, ActivityOptionsCompat.makeSceneTransitionAnimation(this).toBundle()) | |
inline fun <reified A : Activity> Activity.startForResultAnimate(requestCode: Int, config: Intent.() -> Unit) = startActivityForResult(Intent(this, A::class.java).apply(config), requestCode, ActivityOptionsCompat.makeSceneTransitionAnimation(this).toBundle()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment