Android中使用ViewFlipper进行手势切换实例

本文实例讲述了Android中使用ViewFlipper进行手势切换的方法,分享给大家供大家参考。具体实现步骤如下:

首先在layout的xml文件中定义一个ViewFlipper:

<?xml version="1.0" encoding="utf-8"?>  

<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android"  

        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"  

        >  

          

        <TextView  

            android:layout_width="fill_parent"  

            android:layout_height="fill_parent"  

            android:background="#FF0000"  

            />  

              

    </LinearLayout>  

      

    <LinearLayout  

        android:layout_width="fill_parent"  

        android:layout_height="fill_parent"  

        >  

          

        <TextView  

            android:layout_width="fill_parent"  

            android:layout_height="fill_parent"  

            android:background="#00FF00"  

            />  

              

    </LinearLayout>  

      

</ViewFlipper>

声明一个新的GestureDetector,重写它的onFling()函数,在这个函数里面判断手势,这里为横向的拖动:

public class MyGestureDetector extends SimpleOnGestureListener  

{  

    private static final int SWIPE_MIN_DISTANCE = 120;  

    private static final int SWIPE_MAX_OFF_PATH = 250;  

    private static final int SWIPE_THRESHOLD_VELOCITY = 200;  

      

    @Override  

    public boolean onFling(MotionEvent e1, MotionEvent e2,   

                           float velocityX, float velocityY)  

    {  

        try  

        {  

               if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)  

               {  

                   return false;  

               }  

               if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE &&   

                  Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)  

               {  

                viewFlipper.setInAnimation(slideLeftIn);  

                   viewFlipper.setOutAnimation(slideLeftOut);  

                viewFlipper.showNext();  

               }  

               else   

                if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE &&   

                    Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)  

                {  

                    viewFlipper.setInAnimation(slideRightIn);  

                    viewFlipper.setOutAnimation(slideRightOut);  

                    viewFlipper.showPrevious();  

                }  

           }  

        catch (Exception e)  

        {  

              

           }  

           return false;  

    }  

}

注意在Activity中重写onTouchEvent()函数:

private ViewFlipper viewFlipper;  

  

private Animation slideLeftIn;  

private Animation slideLeftOut;  

private Animation slideRightIn;  

private Animation slideRightOut;  

  

private GestureDetector gestureDetector;  

@Override  

public void onCreate(Bundle savedInstanceState)  

{  

    super.onCreate(savedInstanceState);  

    setContentView(R.layout.main);  

      

    viewFlipper = (ViewFlipper)findViewById(R.id.viewFlipper);  

       slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in);  

       slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out);  

       slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);  

       slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out);  

         

       gestureDetector = new GestureDetector(new MyGestureDetector());  

         

       new View.OnTouchListener()  

       {  

           public boolean onTouch(View v, MotionEvent event)  

           {  

               if (gestureDetector.onTouchEvent(event))  

               {  

                   return true;  

               }  

               return false;  

           }  

       };  

}  

  

@Override  

public boolean onTouchEvent(MotionEvent event)  

{  

    if (gestureDetector.onTouchEvent(event))  

    {  

        return true;  

    }  

    else  

    {  

        return false;  

    }  

}

最后,在res文件夹下新建一个anim文件夹,用来存放view之间切换的动画文件:

1.slide_left_in.xml

<?xml version="1.0" encoding="utf-8"?>  

<set xmlns:android="http://schemas.android.com/apk/res/android">  

    <translate  

        android:fromXDelta="100%p"   

        android:toXDelta="0"   

        android:duration="500"  

        />  

    <alpha  

        android:fromAlpha="0.0"   

        android:toAlpha="1.0"  

        android:duration="500"  

        />  

</set>

2.slide_left_out.xml

<?xml version="1.0" encoding="utf-8"?>  

<set xmlns:android="http://schemas.android.com/apk/res/android">  

    <translate  

        android:fromXDelta="0"   

        android:toXDelta="-100%p"   

        android:duration="500"  

        />  

    <alpha  

        android:fromAlpha="1.0"   

        android:toAlpha="0.0"   

        android:duration="500"  

        />  

</set>

3.slide_right_in.xml

<?xml version="1.0" encoding="utf-8"?>  

<set xmlns:android="http://schemas.android.com/apk/res/android">  

    <translate   

        android:fromXDelta="-100%p"   

        android:toXDelta="0"   

        android:duration="500"  

        />  

    <alpha  

        android:fromAlpha="0.0"   

        android:toAlpha="1.0"  

        android:duration="500"  

        />  

</set>

4.slide_right_out.xml

<?xml version="1.0" encoding="utf-8"?>  

<set xmlns:android="http://schemas.android.com/apk/res/android">  

    <translate   

        android:fromXDelta="0"   

        android:toXDelta="100%p"   

        android:duration="500"  

        />  

    <alpha  

        android:fromAlpha="1.0"   

        android:toAlpha="0.0"  

        android:duration="500"  

        />  

</set>

希望本文所述对大家的Android程序设计有所帮助