http://developer.android.com/training/animation/cardflip.html
以上链接在静态布局之间切换..我想在具有动态布局的2个活动之间进行CardFlip
..谢谢提前.. :))
我有两项活动......
Main_Activity
(Say Galaxy s3)Search_Activity
.. Main_Activity
中有一个搜索按钮。当您点击按钮时,Main_Activity
视图必须卡片翻转到Search_Activity
。同样,一旦用户选择了产品,它应该Card-Flip
反之亦然。
我尝试按照上面的URL中的说明实现..但它只在使用XML
定义的两个静态布局之间翻转。我正在ActionBar
答案 0 :(得分:37)
从我所拥有的你不能完全相同的卡在活动之间翻转。
但是,
正如您可能已经知道的那样,您需要overridePendingTransition()
来激活活动之间的转换(doc here)。
现在你需要的只是一个动画资源来完成这个技巧。
我用过这些:
fade_in.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" >
<scale
android:duration="200"
android:fromXScale="0.0"
android:fromYScale="1.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="200"
android:toXScale="1.0"
android:toYScale="1.0" />
<alpha
android:duration="1"
android:fromAlpha="0.0"
android:startOffset="200"
android:toAlpha="1.0" />
</set>
fade_out.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" >
<scale
android:duration="200"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="0.0"
android:toYScale="1.0" />
<alpha
android:duration="1"
android:fromAlpha="1.0"
android:startOffset="200"
android:toAlpha="0.0" />
</set>
请注意,旋转动画仅在给定枢轴位置(x,y坐标)的Z轴(进入屏幕的轴)周围旋转,因此您无法使用它绕Y轴翻转。
我所做的就是在保持高度的同时缩放中间的宽度,从而产生活动的幻觉。此外,当宽度为0时,进入和退出活动分别淡入和淡出,因此看起来它们正在切换。翻转动画的duration
的{{1}}属性必须与两个动画的所有scale
属性相同。
不完美,但为我做了伎俩。
希望它有所帮助。
答案 1 :(得分:4)
不可能在活动之间进行卡片翻转动画,就像接受的答案中所说的那样(只是将新活动从屏幕中间扩展到两侧)。
原因是,在调用overridePendingTransition()
时,您只是将动画应用于活动,而不是当前打开的活动。
在链接到的(非常好的)教程中,总共有4个动画,每个转换有2个动画(一个用于进入屏幕的片段,另一个用于片段,&#39; ;退出屏幕)。
以下是我解决这个问题的方法,并在我的2个活动之间制作了翻转卡动画,但它对我的活动内容非常习惯。对于某些上下文,我的第一个活动包含一个全屏图像,我只是想将该图像翻转到另一个相同大小的视图。
overridePendingTransition(0, 0)
ObjectAnimator
s在代码中重写了该代码。onBackPressed()
方法以反向顺序运行相同的动画使用此机制,您可以完全执行任何自定义转换,因为您只需在视图之间设置动画。 以下是有关该技术的更多信息:https://www.youtube.com/watch?v=ihzZrS69i_s#t=1001
答案 2 :(得分:2)
您可以在两个活动之间制作这样的卡片翻转动画(附赠gif)。
执行以下步骤:
首先在动画fade_in.xml
中创建XML res > anim > fade_in.xml
fade_in.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" >
<scale
android:duration="2000"
android:fromXScale="0.0"
android:fromYScale="1.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="2000"
android:toXScale="1.0"
android:toYScale="1.0" />
<alpha
android:duration="1"
android:fromAlpha="0.0"
android:startOffset="2000"
android:toAlpha="1.0" />
</set>
然后在动画fade_out.xml
中创建第二个XML res > anim > fade_out.xml
fade_out.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" >
<scale
android:duration="2000"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="0.0"
android:toYScale="1.0" />
<alpha
android:duration="1"
android:fromAlpha="1.0"
android:startOffset="2000"
android:toAlpha="0.0" />
</set>
创建两个动画XML之后,然后在res>value>style.xml
内设置值
现在在style.xml
内仔细添加此代码,以便在所有活动中设置卡片翻转动画。(如果您希望在选定的两个活动之间设置此动画,请设置.java
中的动画。)
在style.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!-- add code below -->
<item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item>
</style>
<style name="CustomActivityAnimation" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/fade_in</item>
<item name="android:activityOpenExitAnimation">@anim/fade_out</item>
<item name="android:activityCloseEnterAnimation">@anim/fade_in</item>
<item name="android:activityCloseExitAnimation">@anim/fade_out</item>
</style>
</resources>
谢谢!快乐编码:)