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

 更新时间:2014年10月14日 09:42:28   投稿:shichen2014  
这篇文章主要介绍了Android中使用ViewFlipper进行手势切换的方法,以实例形式详细讲述了XML文件的定义及功能函数的实现过程,需要的朋友可以参考下

本文实例讲述了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程序设计有所帮助

相关文章

  • Android控件系列之Shape使用方法

    Android控件系列之Shape使用方法

    Android控件系列之Shape使用方法,需要的朋友可以参考一下
    2013-05-05
  • Kotlin扩展函数超详细介绍

    Kotlin扩展函数超详细介绍

    Kotlin 可以为一个不能修改的或来自第三方库中的类编写一个新的函数。 这个新增的函数就像那个原始类本来就有的函数一样,可以用普通的方法调用,这种机制的函数称为扩展函数
    2022-09-09
  • Flutter进阶之实现动画效果(二)

    Flutter进阶之实现动画效果(二)

    这篇文章主要为大家详细介绍了Flutter进阶之实现动画效果的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Android中imageview.ScaleType使用方法详细介绍

    Android中imageview.ScaleType使用方法详细介绍

    这篇文章主要介绍了Android中imageview.ScaleType使用方法详细介绍的相关资料,需要的朋友可以参考下
    2017-06-06
  • android之自定义Toast使用方法

    android之自定义Toast使用方法

    有时我们的程序使用默认的Toast时会和程序的整体风格不搭配,这个时候我们就需要自定义Toast,使其与我们的程序更加融合,使用自定义Toast,首先我们需要添加一个布局文件,该布局文件的结构和Activity使用的布局文件结构一致,在该布局文件中我们需设计我们Toast的布局
    2013-01-01
  • Flutter质感设计之表单输入

    Flutter质感设计之表单输入

    这篇文章主要为大家详细介绍了Flutter质感设计之表单输入,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Android开发之文件操作详解

    Android开发之文件操作详解

    这篇文章主要介绍了Android开发之文件操作,结合实例形式分析了Android开发中文件操作的步骤及布局、功能等实现技巧,需要的朋友可以参考下
    2017-07-07
  • Android使用Websocket实现聊天室

    Android使用Websocket实现聊天室

    这篇文章主要为大家详细介绍了Android使用Websocket实现聊天室,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • android电话窃听器(示例代码)

    android电话窃听器(示例代码)

    本篇文章我将为大家介绍一下android电话窃听器(示例代码),需要的朋友可以过来参考下,希望对大家有所帮助
    2013-11-11
  • 详解Android App中创建ViewPager组件的方法

    详解Android App中创建ViewPager组件的方法

    这篇文章主要介绍了详解Android App中创建ViewPager组件的方法,ViewPager最基本的功能就是可以使视图滑动,需要的朋友可以参考下
    2016-03-03

最新评论