广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-05-03 14:17:41 次阅读 稿源:互联网
    广告

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

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告