假设我有2个XML文件,我的活动将根据用户的某些按钮按下setContentView相应的一个。是否可以更改内容视图更改的过渡动画?
到目前为止,我看到super.overridePendingTransition()适用于启动新活动,但是我的示例没有启动新活动,只是更改当前布局中的布局。
答案 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
切换视图。如果您想为左右移动设置不同的动画,则必须在转换前在代码中设置inAnimation
和outAnimation
。
更完整的示例是here。