如何在两个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