如何在两个layout之间切换,就是一个activity中 两个LinearLayout,一个可见,一个不可见,然后从可见的那个切换到不可见那个,中间实现个滑动效果。
一、利用ViewFlipper实现 1、屏幕切换指的是在同一个Activity内屏幕见的切换,最长见的情况就是在一个FrameLayout内有多个页面,比如一个系统设置页面;一个个性化设置页面。 2、介绍ViewFilpper类ViewFlipper extends ViewAnimator java.lang.Object ↳android.view.View ↳android.view.ViewGroup ↳android.widget.FrameLayout ↳android.widget.ViewAnimator ↳android.widget.ViewFlipper
Class Overview Simple ViewAnimator that will animate between two or more views that have been added to it. Only one child is shown at a time. If requested, can automatically flip between each child at a regular interval. 意思是:简单的ViewAnimator之间,两个或两个以上的view加上动画效果。只有一个小孩会显示在一个时间。如果需要,每个孩子能自动翻转之间在固定的时间间隔。
该类继承了Framelayout类,ViewAnimator类的作用是为FrameLayout里面的View切换提供动画效果。
该类有如下几个和动画相关的函数: setInAnimation:设置View进入屏幕时候使用的动画,该函数有两个版本,一个接受单个参数,类型为android.view.animation.Animation;一个接受两个参数,类型为Context和int,分别为Context对象和定义Animation的resourceID。 setOutAnimation: 设置View退出屏幕时候使用的动画,参数setInAnimation函数一样。 showNext: 调用该函数来显示FrameLayout里面的下一个View。 showPrevious: 调用该函数来显示FrameLayout里面的上一个View。
Translate动画非常好理解,就是定义一个开始的位置和一个结束位置,定义移动时间,然后就能自动产生移动动画。Android的translate移动方向有 横向(X) 竖向(Y), 左右滑动使用了横向移动效果。
3、首选看一下定义四个动画的xml文件: in_leftright.xml——从左到右进入屏幕
1 2 3 4 5 6 7 <?xml version="1.0" encoding="utf-8" ?> <set xmlns:android ="http://schemas.android.com/apk/res/android" > <translate android:duration ="3000" android:fromXDelta ="-100%p" android:toXDelta ="0" /> </set >
out_leftright.xml——从左到右出去屏幕
1 2 3 4 5 6 7 <?xml version="1.0" encoding="utf-8" ?> <set xmlns:android ="http://schemas.android.com/apk/res/android" > <translate android:duration ="3000" android:fromXDelta ="0" android:toXDelta ="100%p" /> </set >
in_rightleft.xml——从右到左进入屏幕
1 2 3 4 5 6 7 <?xml version="1.0" encoding="utf-8" ?> <set xmlns:android ="http://schemas.android.com/apk/res/android" > <translate android:duration ="3000" android:fromXDelta ="100%p" android:toXDelta ="0" /> </set >
out_rightleft.xml——从右到左出去屏幕
1 2 3 4 5 6 7 <?xml version="1.0" encoding="utf-8" ?> <set xmlns:android ="http://schemas.android.com/apk/res/android" > <translate android:duration ="3000" android:fromXDelta ="100%p" android:toXDelta ="0" /> </set >
4、定义main.xml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 <?xml version="1.0" encoding="utf-8" ?> <LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:layout_width ="fill_parent" android:layout_height ="fill_parent" android:orientation ="vertical" > <ViewFlipper android:id ="@+id/viewFlipper" android:layout_width ="fill_parent" android:layout_height ="fill_parent" > <LinearLayout android:layout_width ="fill_parent" android:layout_height ="fill_parent" android:gravity ="center" > <ImageView android:layout_width ="wrap_content" android:layout_height ="wrap_content" android:src ="@drawable/a1" /> </LinearLayout > <LinearLayout android:layout_width ="fill_parent" android:layout_height ="fill_parent" android:gravity ="center" > <ImageView android:layout_width ="wrap_content" android:layout_height ="wrap_content" android:src ="@drawable/a2" android:gravity ="center" /> </LinearLayout > <LinearLayout android:layout_width ="fill_parent" android:layout_height ="fill_parent" android:gravity ="center" > <ImageView android:layout_width ="wrap_content" android:layout_height ="wrap_content" android:src ="@drawable/a3" android:gravity ="center" /> </LinearLayout > <LinearLayout android:layout_width ="fill_parent" android:layout_height ="fill_parent" android:gravity ="center" > <ImageView android:layout_width ="wrap_content" android:layout_height ="wrap_content" android:src ="@drawable/a4" android:gravity ="center" /> </LinearLayout > </ViewFlipper > </LinearLayout >
5、java代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 public class SwitchTest2Activity extends Activity { ViewFlipper viewFlipper = null ; float startX; public void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); init(); } private void init () { viewFlipper = (ViewFlipper) this .findViewById(R.id.viewFlipper); } public boolean onTouchEvent (MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: startX = event.getX(); break ; case MotionEvent.ACTION_UP: if (event.getX() > startX) { viewFlipper.setInAnimation(this , R.anim.in_leftright); viewFlipper.setOutAnimation(this , R.anim.out_leftright); viewFlipper.showNext(); } else if (event.getX() < startX) { viewFlipper.setInAnimation(this , R.anim.in_rightleft); viewFlipper.setOutAnimation(this , R.anim.out_rightleft); viewFlipper.showPrevious(); } break ; } return super .onTouchEvent(event); } }
二、普通实现 Activity:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public void JumpToSecondView (View v) { secondView.setVisibility(View.VISIBLE); secondView.setClickable(true ); secondView.setAnimation(AnimationUtils.loadAnimation(this , R.anim.in_rightleft)); firstView.setVisibility(View.GONE); firstView.setAnimation(AnimationUtils.loadAnimation(this , R.anim.out_rightleft)); }
main.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 <?xml version="1.0" encoding="utf-8" ?> <FrameLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:id ="@+id/mainView" android:layout_width ="fill_parent" android:layout_height ="fill_parent" > <LinearLayout android:id ="@+id/FirstView" android:layout_width ="fill_parent" android:layout_height ="fill_parent" android:background ="#ffffff" android:visibility ="visible" > <Button android:id ="@+id/ButtonNext" android:layout_width ="wrap_content" android:layout_height ="wrap_content" android:text ="showNext" android:onClick ="JumpToSecondView" > </Button > </LinearLayout > <LinearLayout android:id ="@+id/SecondView" android:layout_width ="fill_parent" android:layout_height ="fill_parent" android:background ="#000000" android:visibility ="invisible" > <Button android:id ="@+id/ButtonBack" android:layout_width ="wrap_content" android:layout_height ="wrap_content" android:text ="Back" android:onClick ="JumpToFirstView" > </Button > </LinearLayout > </FrameLayout >
参考:Android利用ViewFlipper实现屏幕切换动画效果 http://www.cnblogs.com/bavariama/archive/2013/01/29/2881225.html http://www.eoeandroid.com/thread-27271-1-1.html