我设法通过动画R.anim.anim_left_to_right
轻松地在我的活动中拉出从右到左的幻灯片:
<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="300"/>
</set>
在活动A 中,我覆盖了pendingTransition:
overridePendingTransition(R.anim.anim_left_to_right, 0);
在活动B 中,在onBackPressed方法中,我像这样覆盖了pendingTransition:
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(0, R.anim.anim_right_to_left);
}
R.anim.anim_right_to_left
看起来像这样:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="0%" android:toXDelta="100%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="300" />
</set>
这种类型的动画的问题在于,活动A和B之间的动画非常FLAT - 活动B实际上是在活动A上滚动,并且活动中没有深度。我希望在活动转换时获得某种类型的深度,其中退出的活动A将在后台缩小,活动B将在缩放时滑过它。退出活动B时,活动B应向左滑动,活动A将缩小至正常大小。
来自Google的视频实际上在 ViewPager 上展示了这一点,但我想对* Activity **产生类似的效果:
http://developer.android.com/training/animation/anim_page_transformer_depth.mp4
我试图把它放在活动A :
中 overridePendingTransition(R.anim.anim_left_to_right, R.anim.anim_scale_out);
这是活动B :
overridePendingTransition(R.anim.anim_scale_in, R.anim.anim_right_to_left);
R.anim.anim_scale_out
:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale android:fromXScale="1.0"
android:fromYScale="1.0"
android:toXScale="0.8"
android:toYScale="0.8"
android:duration="300"
android:fillBefore="false" />
</set>
R.anim.anim_scale_in
:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale android:fromXScale="0.8"
android:fromYScale="0.8"
android:toXScale="1"
android:toYScale="1"
android:duration="300"
android:fillBefore="false" />
</set>
动画还没有给我活动的深度。 当从活动A转到B时,我需要缩放活动A,活动B从右向左滑动。从活动B转到A时,我希望活动B从左向右滑动,活动A向后缩放。
答案 0 :(得分:1)
将这些文件放在anim文件夹中:
slide_in_left:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="true">
<translate android:fromXDelta="-100%"
android:toXDelta="0%" android:fromYDelta="0%"
android:toYDelta="0%" android:duration="300">
</translate>
</set>
slide_in_right:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="50%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
slide_out_left:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-50%p"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
slide_out_right:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate android:fromXDelta="0%" android:toXDelta="100%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="0">
</translate>
</set>
然后对于开始和结束活动使用适当的动画:
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
修改强>
现在您想要使用比例的动画在这里:
scale_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale android:fromXScale="1.0"
android:fromYScale="1.0"
android:toXScale="0.8"
android:toYScale="0.8"
android:duration="500"
android:fillBefore="false" />
</set>
scale_out:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale android:fromXScale="1.0"
android:fromYScale="1.0"
android:toXScale="1.0"
android:toYScale="1.0"
android:duration="500"
android:fillBefore="false" />
</set>
left_to_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%"
android:toXDelta="0%"
android:fromYDelta="0%"
android:toYDelta="0%"
android:duration="500"/>
</set>
RIGHT_TO_LEFT:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="-100%" android:toXDelta="0%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="500" />
</set>
并使用它们:
活动A至B - &gt;
overridePendingTransition(R.anim.left_to_right, R.anim.slide_out);
活动B至A - >;
overridePendingTransition(R.anim.right_to_left,R.anim.slide_in);
您也可以根据自己的要求更改动画的持续时间。
答案 1 :(得分:0)
你应该结合翻译动画和缩放动画。标签&#34; set&#34;可以有几个不同类型动画的子项。在一个xml文件中写下这两种动画。它会起作用。< / p>
答案 2 :(得分:0)
是的,这是xml代码。我尝试过,效果很好。 输入动画:
<translate
android:duration="1000"
android:fromXDelta="100%p"
android:toXDelta="0"
/>
<scale android:fromXScale="0.8"
android:fromYScale="0.8"
android:toXScale="1"
android:pivotX="50%p"
android:pivotY="50%p"
android:toYScale="1"
android:duration="1000" />
</set>
exit animation:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<translate
android:duration="1000"
android:fromXDelta="0"
android:toXDelta="-100%p"
/>
<scale android:fromXScale="1.0"
android:fromYScale="1.0"
android:toXScale="0.8"
android:pivotX="50%p"
android:pivotY="50%p"
android:toYScale="0.8"
android:duration="1000" />
</set>
如果它仍然不适合你。我可以通过电子邮件将我的项目发送给你。祝你好运。
答案 3 :(得分:0)
下面的XML编码很有效。这个
底部
O(n)
顶出
<translate
android:fromYDelta="100%p"
android:toYDelta="0"
android:duration="500"/>
向左滑动:
<translate
android:fromYDelta="0"
android:toYDelta="-100%p"
android:duration="500"/>
向右滑动:
<translate
android:duration="400"
android:fromXDelta="-100%"
android:toXDelta="0%"/>
<alpha
android:duration="400"
android:fromAlpha="0.0"
android:toAlpha="1.0"/>