服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android中使用ViewFlipper进行手势切换实例

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

2021-03-10 15:32Android开发网 Android

这篇文章主要介绍了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程序设计有所帮助

延伸 · 阅读

精彩推荐
  • AndroidAndroid实现Service获取当前位置(GPS+基站)的方法

    Android实现Service获取当前位置(GPS+基站)的方法

    这篇文章主要介绍了Android实现Service获取当前位置(GPS+基站)的方法,较为详细的分析了Service基于GPS位置的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    Ruthless8332021-03-31
  • AndroidAndroid CardView+ViewPager实现ViewPager翻页动画的方法

    Android CardView+ViewPager实现ViewPager翻页动画的方法

    本篇文章主要介绍了Android CardView+ViewPager实现ViewPager翻页动画的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Abby代黎明9592022-03-02
  • AndroidAndroid编程解析XML方法详解(SAX,DOM与PULL)

    Android编程解析XML方法详解(SAX,DOM与PULL)

    这篇文章主要介绍了Android编程解析XML方法,结合实例形式详细分析了Android解析XML文件的常用方法与相关实现技巧,需要的朋友可以参考下...

    liuhe68810042021-05-03
  • AndroidAndroid实现固定屏幕显示的方法

    Android实现固定屏幕显示的方法

    这篇文章主要介绍了Android实现固定屏幕显示的方法,实例分析了Android屏幕固定显示所涉及的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    鉴客6182021-03-27
  • Android汇总Android视频录制中常见问题

    汇总Android视频录制中常见问题

    这篇文章主要汇总了Android视频录制中常见问题,帮助大家更好地解决Android视频录制中常见的问题,需要的朋友可以参考下...

    yh_thu5192021-04-28
  • AndroidAndroid中AsyncTask详细介绍

    Android中AsyncTask详细介绍

    这篇文章主要介绍了Android中AsyncTask详细介绍,AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合,需要的朋友可以参考下...

    Android开发网7432021-03-11
  • AndroidAndroid程序设计之AIDL实例详解

    Android程序设计之AIDL实例详解

    这篇文章主要介绍了Android程序设计的AIDL,以一个完整实例的形式较为详细的讲述了AIDL的原理及实现方法,需要的朋友可以参考下...

    Android开发网4622021-03-09
  • AndroidAndroid界面效果UI开发资料汇总(附资料包)

    Android界面效果UI开发资料汇总(附资料包)

    android ui界面设计,友好的界面会提高用户体验度;同时也增强了android ui界面设计的难度,本文提供了一些常用开发资料(有下载哦)感兴趣的朋友可以了解下...

    Android开发网4652021-01-03