Skip to content

Instantly share code, notes, and snippets.

@kotoMJ
Last active April 9, 2018 16:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kotoMJ/57e3804d54b617ce9888d57379155c59 to your computer and use it in GitHub Desktop.
Save kotoMJ/57e3804d54b617ce9888d57379155c59 to your computer and use it in GitHub Desktop.
Animate activity sliding right to left.
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)
}
}
}
const val REQUEST_NEXT_STEP: Int = 20
class MySlideActivity: AppCompatActivity(){
override fun onClick() {
startForResultAnimate<MySlideActivity>(REQUEST_NEXT_STEP)
}
}
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)
}
}
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