moy*_*oyo 6 android android-animation android-activity android-transitions activity-transition
我想用自定义翻译动画开始一个新活动,所以我在 xml 中对我的动画使用 overridePendingTransition。
overridePendingTransition(R.anim.enter_from_right, R.anim.exit_to_left)
Run Code Online (Sandbox Code Playgroud)
enter_from_right.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="100%" android:toXDelta="0%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="350" />
Run Code Online (Sandbox Code Playgroud)
有什么方法可以为活动过渡以编程方式修改/创建动画?在这种情况下,使用特定值动态修改 fromXDelta
经过一番研究后,我会自己回答。你需要两件事:
1 - 通过在 AndroidManifest.xml 中设置以下主题来创建“透明”活动。如果您不这样做,将会出现一个空白屏幕:
<style name="TransparentActivity" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
Run Code Online (Sandbox Code Playgroud)
2. 手动创建一个 TranslationAnimation (或您想要的动画),将其应用到根decorView,并通过将其设置为 0 来禁用自定义动画:
overridePendingTransition(0, 0);
// Custom transition
TranslateAnimation translateAnimation = new TranslateAnimation(-translationLength, 0, 0, 0);
translateAnimation.setDuration(350);
translateAnimation.setFillAfter(true);
View rootView = getWindow().getDecorView().findViewById(android.R.id.content);
rootView.startAnimation(translateAnimation);
rootView.getLayoutParams().width = translationLength;
Run Code Online (Sandbox Code Playgroud)
如果您想要在 BackPressed 上或活动完成时显示反向动画:
@Override
public void finish() {
overridePendingTransition(0, 0);
TranslateAnimation translateAnimation = new TranslateAnimation(0, -translationLength, 0, 0);
translateAnimation.setDuration(350);
translateAnimation.setFillAfter(true);
translateAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
YourActivity.super.finish();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
getWindow().getDecorView().findViewById(android.R.id.content).startAnimation(translateAnimation);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1255 次 |
| 最近记录: |