是否可以在同一活动中更改视图时执行过渡动画?

时间:2010-12-15 02:05:05

标签: android

假设我有2个XML文件,我的活动将根据用户的某些按钮按下setContentView相应的一个。是否可以更改内容视图更改的过渡动画?

到目前为止,我看到super.overridePendingTransition()适用于启动新活动,但是我的示例没有启动新活动,只是更改当前布局中的布局。

3 个答案:

答案 0 :(得分:33)

Mathias Lin已经很好地解释了这一点。

您始终可以使用Android框架提供的默认股票动画。

下面是一个示例代码:

boolean isFirstXml=evaluatingConditionFunction();
LayoutInflater inflator=getLayoutInflater();
View view=inflator.inflate(isFirstXml?R.layout.myfirstxml:R.layout.myseconxml, null, false);
view.startAnimation(AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right));
setContentView(view);

从您拥有父视图的任何活动中调用此信息。

对于自定义动画,您可以访问开发人员文档。继承人documentation链接。

答案 1 :(得分:7)

是的,您可以在几乎任何您喜欢的视图上应用动画。只需通过view.startAnimation(animation);

获取相应布局的外部视图组(内容视图)并将动画应用于该视图。根据您想要做的动画类型,可能有意义的是膨胀/加载两个布局但隐藏其中一个然后交换。请说明您的转变类型。

例如:如果进行alpha转换,则会在当前布局上运行alphaAnimation,当动画结束时(AnimationListener),您将内容视图设置为新布局,并通过淡入淡出内容,通过另一个alphaAnimation。

答案 2 :(得分:4)

更好的解决方案是使用ViewFlipper:它是一个FrameLayout,可以在更改视图时执行动画。

<ViewFlipper
    android:id="@+id/[your_id_here]"
    android:inAnimation="..."
    android:outAnimation="..."
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
        <RelativeLayout
            <!--Your first layout -->
        </RelativeLayout>
        <RelativeLayout
            <!--Your second layout -->
        </RelativeLayout>
</ViewFlipper>

然后,使用setDisplayedChild(int)showNext()showPrevious切换视图。如果您想为左右移动设置不同的动画,则必须在转换前在代码中设置inAnimationoutAnimation

更完整的示例是here