带有一些注意事项的alpha动画滑动
slide_up.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@integer/activity_transition_time"
>
<translate
android:fromYDelta="100%p"
android:toYDelta="0"/>
<alpha
android:fromAlpha="0.5"
android:toAlpha="1"/>
</set>
slide_down.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@integer/activity_transition_time"
>
<translate
android:fromYDelta="0"
android:toYDelta="100%p"/>
<alpha
android:fromAlpha="1"
android:toAlpha="0.5"/>
</set>
no_animation.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@integer/activity_transition_time"
android:fromYDelta="0"
android:toYDelta="0"/>
首个活动
startActivity(new Intent(this, SecondActivity.class));
overridePendingTransition(R.anim.slide_up, R.anim.no_animation); // remember to put it after startActivity, if you put it to above, animation will not working
// document say if we don't want animation we can put 0. However, if we put 0 instead of R.anim.no_animation, the exist activity will become black when animate
第二个活动
finish();
overridePendingTransition(R.anim.no_animation, R.anim.slide_down);
完成
更多
我试图让滑动动画像iOS动画一样在呈现视图模型时(像这个https://www.youtube.com/watch?v=deZobvh2064),但失败了。
看看iOS的present动画,你会发现:从底部有一个透明度(大约50%)的动画,然后它快速地转换为更慢的动画,动画时间大约> 500ms(我使用trim video工具来计算动画时间https://www.kapwing.com/trim-video所以无法确切到达100%)
然后我尝试应用到Android。
为了使alpha,我使用<alpha>
并成功。
为了使动画开始比较快,然后变慢,我使用了android:interpolator="a decelerate interpolator"
但几乎失败了。
Android有3个默认的decelerate interpolator
@android:interpolator/decelerate_quad
-> 因子=1
@android:interpolator/decelerate_cubic
-> 因子=1.5
@android:interpolator/decelerate_quint
_> 因子=2.5
(较高的因子<=>动画从开始时启动更快,结束时变得更慢)
这是一个很好的教程http://cogitolearning.co.uk/2013/10/android-animations-tutorial-5-more-on-interpolators/来理解它
我尝试了上面的3个插值器,但无法像iOS那样实现,动画无法像iOS那样更快地启动。然后我创建了一个自定义的decelerateInterpolator,因子为3,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<decelerateInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
android:factor="3" />
我将持续时间从500 -> 750
增加。它表现良好(与 iOS 非常相似)。但是,在某些设备上,它只能正常运行,而在一些设备上,动画速度相当慢。后来,我知道不同的设备可能有不同的动画效果(例如:某些设备会更快,而某些设备会更慢),因此我无法使所有 Android 设备中的动画效果相似。因此,我不使用interpolator
。我不知道我的测试是否完全准确,但我希望这个经验能够有所帮助。
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
您可以在GmailAnimation或LopeAnimations中看到这些示例。此外,您还可以在Blog中查看更多内容。 - Cabezas