布局之间的淡入淡出效果

作为对象,我会重现两个布局之间的淡入淡出效果。 现在我有这种情况:

LinearLayout l; LinearLayout l2; 

切换他们之间我已经使用

 l.setVisibility(View.GONE); l2.setVisibility(View.VISIBLE); 

我希望在这个转换之间添加淡入淡出效果,我该怎么做呢?

Solutions Collecting From Web of "布局之间的淡入淡出效果"

使用R.anim.fade_out&.R.anim.fade_in你可以创build一个这样做的animation。 我不知道这个自己很多,但是这里有一个关于animation的教程: animation教程

PS本教程是不是我的,因此信用不出去给我。

编辑:

 AnimationSet set = new AnimationSet(true); Animation animation = new AlphaAnimation(0.0f, 1.0f); animation.setDuration(50); set.addAnimation(animation); animation = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0.0f,Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, -1.0f,Animation.RELATIVE_TO_SELF, 0.0f ); animation.setDuration(100); set.addAnimation(animation); LayoutAnimationController controller = new LayoutAnimationController(set, 0.5f); l.setLayoutAnimation(controller); 

淡出animation

 public static Animation runFadeOutAnimationOn(Activity ctx, View target) { Animation animation = AnimationUtils.loadAnimation(ctx,android.R.anim.fade_out); target.startAnimation(animation); return animation; } 

我猜你可以尝试这样的事情,我从教程复制粘贴的animation我不知道它做什么,因为我没有经验的Android开发。 另一个例子可以是例子2

这是一个工作的解决scheme,在两种布局之间淡入淡出:

 public class CrossFadeActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.crossfade); final View l1 = findViewById(R.id.l1); final View l2 = findViewById(R.id.l2); final Animation fadeOut = AnimationUtils.loadAnimation(CrossFadeActivity.this, R.anim.fade_out); final Animation fadeIn = AnimationUtils.loadAnimation(CrossFadeActivity.this, R.anim.fade_in); findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { fadeOut.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { l1.setVisibility(View.GONE); } }); l1.startAnimation(fadeOut); l2.setVisibility(View.VISIBLE); l2.startAnimation(fadeIn); } }); findViewById(R.id.button2).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { fadeOut.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { l2.setVisibility(View.GONE); } }); l2.startAnimation(fadeOut); l1.setVisibility(View.VISIBLE); l1.startAnimation(fadeIn); } }); } } 

crossfade.xml:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/l1" android:layout_width="fill_parent" android:layout_height="300dip" android:orientation="vertical" android:background="@drawable/someimage" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout> <RelativeLayout android:id="@+id/l2" android:layout_width="fill_parent" android:layout_height="300dip" android:orientation="vertical" android:background="@drawable/someimage2" android:visibility="gone" > <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" android:layout_centerInParent="true" /> </RelativeLayout> </RelativeLayout> 

其中l1和l2是2个随机示例布局。 诀窍是将它们放在XML中,使它们在可见/不可见的情况下相互重叠(例如,在RelativeLayout中),将animation添加到animation中以切换完成时的可见性,并将必须淡入的视图设置为可见animation开始,否则animation将不可见。

我把button和监听器切换到布局本身的animation,因为我需要这样实现,但是单击监听器当然可以在其他地方(如果它只有一个,它应该与一些标志或检查组合使用知道如何切换)。

这些是animation文件。 他们必须存储在res / anim文件夹中:

fade_in.xml

 <?xml version="1.0" encoding="UTF-8"?> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000" android:fillAfter="true" android:fromAlpha="0.0" android:toAlpha="1.0" /> 

fade_out.xml

 <?xml version="1.0" encoding="UTF-8"?> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000" android:fillAfter="true" android:fromAlpha="1.0" android:toAlpha="0" /> 

更新:

您可以使用Android API( android.R.fade_in )中的默认fade_in来代替使用R.anim.fade_in:

 final Animation fadeIn = AnimationUtils.loadAnimation(CrossFadeActivity.this, android.R.anim.fade_in); 

使用android.R.anim.fade_in,你不需要创buildres / anim / fade_in.xml文件。

Android在android.R.anim上有一些有用的animation: http : //developer.android.com/reference/android/R.anim.html

由于android 3.0可以使用

 android:animateLayoutChanges="true" 

在xml中的布局中,在运行时对这个特定的布局内容所做的任何改变都将是animation的。 例如,在你的情况下,你将需要为父和母的布局设置父属性的这个属性,例如

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="me.kalem.android.RegistrationActivity" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:animateLayoutChanges="true" android:padding="20dp"> <LinearLayout android:id="@+id/l1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:visibility="visible"> ........ </LinearLayout> <LinearLayout android:id="@+id/l2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:visibility="gone"> ........ </LinearLayout> </LinearLayout> 

现在隐藏l1并在运行时显示l2将会animation。