题 活动之间的卡片翻转动画


怎么做 卡片翻转 活动之间的动画

http://developer.android.com/training/animation/cardflip.html

以上链接在静态布局之间切换..我想做一个 CardFlip 两个活动之间有动态布局..谢谢你提前.. :)

我有两个活动......

  1. 一个 Main_Activity 包含产品的详细信息(Say Galaxy s3)
  2. 一个 Search_Activity 查询用户搜索请求..

中有一个搜索按钮 Main_Activity。当你点击按钮时 Main_Activity 视图必须卡翻转到 Search_Activity。类似地,一旦用户选择了产品,它应该 Card-Flip 反之亦然。

我尝试按照上面的URL中提到的那样实现..但它只在两个使用定义的静态布局之间翻转 XML。我正在实施搜索 ActionBar


22
2018-03-09 11:01


起源


您需要更具体地了解问题所在。 - Fabian Lauer
你去.... Fabin - Augustus Francis


答案:


从我所拥有的你不能完全相同的卡在活动之间翻转。
但,
你可能已经知道你需要了 overridePendingTransition() 为了激活活动之间的过渡(doc在这里)。 现在你需要的只是一个动画资源来完成这个技巧。 我用过这些:
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 的属性 scale 动画中的翻转必须与所有动画相同 startOffset 两种动画的属性。
不完美,但为我做了伎俩。
希望能帮助到你。


37
2017-09-09 08:50



不错的伎俩,是的,它并不完美,但它提供了一个非常好的错觉:) - Warpzit
这不是一个“卡片翻转”动画,新活动只是从中间扩展。仅通过使用就无法进行卡片翻转动画 overridePendingTransition() 使用一些自定义XML,请参阅我的答案以了解原因 - nbarraille
好的解决方法。接近我想要的。谢谢! - AndroidMechanic - Viral Patel
很棒的工作!和平 - seekingStillness


在活动之间进行卡片翻转动画是不可能的,就像在接受的答案中所说的那样(只是将新活动从屏幕中间扩展到两侧)。

原因是,在打电话时 overridePendingTransition(),你只是将动画应用于 开始的活动,而不是目前开放的那个。

在链接到的(非常好的)教程中,总共有4个动画,每个转换有2个动画(一个用于进入屏幕的片段,另一个用于退出屏幕的片段)。

这是我解决这个问题的方法,并在我的2个活动之间制作了翻转卡动画,但它对我的活动内容非常习惯。对于某些上下文,我的第一个活动包含一个全屏图像,我只是想将该图像翻转到另一个相同大小的视图。

  1. 通过调用禁用自动窗口动画 overridePendingTransition(0, 0)
  2. 在第二个活动的包中,为新活动传递足够的信息以重新创建视图(对我来说,它是图像的大小和位置,以及要加载的资源)
  3. 在新视图上设置onPreDrawListener,在其中重新创建父活动的视图(在我的情况下为图像)
  4. 你只需翻转2个视图。为此,我重写了您发布的Flip Card片段转换教程中的代码,并使用代码重写了代码 ObjectAnimator秒。
  5. 覆盖你的 onBackPressed() 以相反顺序运行相同动画的方法

使用此机制,您可以完全执行任何自定义转换,因为您只是在视图之间进行动画处理。 以下是有关该技术的更多信息: https://www.youtube.com/watch?v=ihzZrS69i_s#t=1001


3
2017-08-11 18:20