服务器之家

服务器之家 > 正文

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

时间:2021-03-10 15:32     来源/作者:Android开发网

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

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部