滑动翻页控件ViewFlipper的使用 .

发布日期:2013-01-18 17:13:29

push_right_out.xml


  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <translate android:fromXDelta="0" android:toXDelta="100%p"  
  4.         android:duration="500" />   
  5.     <alpha android:fromAlpha="1.0" android:toAlpha="0.1"  
  6.         android:duration="500" />  
  7. </set>  
<?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.1"
		android:duration="500" />
</set>



push_right_in.xml


  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <translate android:fromXDelta="-100%p" android:toXDelta="0"  
  4.         android:duration="500" />   
  5.     <alpha android:fromAlpha="0.1" android:toAlpha="1.0"  
  6.         android:duration="500" />  
  7. </set>  
<?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.1" android:toAlpha="1.0"
		android:duration="500" />
</set>




push_left_out.xml


  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <translate android:fromXDelta="0" android:toXDelta="-100%p"  
  4.         android:duration="500" />  
  5.     <alpha android:fromAlpha="1.0"  android:toAlpha="0.1"  
  6.         android:duration="500" />  
  7. </set>  
<?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.1"
		android:duration="500" />
</set>

push_left_in.xml


  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <translate android:fromXDelta="100%p" android:toXDelta="0"  
  4.         android:duration="500" />  
  5.     <alpha android:fromAlpha="0.1"  android:toAlpha="1.0"  
  6.         android:duration="500" />  
  7. </set>  
<?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.1"  android:toAlpha="1.0"
		android:duration="500" />
</set>
  1. package talent.library;  
  2.   
  3. import talent.pad.R;  
  4. import android.view.GestureDetector;  
  5. import android.view.MotionEvent;  
  6. import android.view.View;  
  7. import android.view.GestureDetector.SimpleOnGestureListener;  
  8. import android.view.View.OnTouchListener;  
  9. import android.view.animation.AnimationUtils;  
  10. import android.widget.ViewFlipper;  
  11.   
  12. public class ViewFlipperEx{  
  13.     //public member   
  14.     public final ViewFlipper Handle;  
  15.     //private variant   
  16.     private GestureDetector gestureDetector;      
  17.     // touch listener   
  18.     private OnTouchListener touchListener = new OnTouchListener(){  
  19.         @Override  
  20.         public boolean onTouch(View v, MotionEvent event) {  
  21.             if(!gestureDetector.onTouchEvent(event)){  
  22.                 com.Logi(""+Handle.getDisplayedChild());//获取当前显示的视图索引   
  23.                 return false;  
  24.             }  
  25.             return true;  
  26.         }  
  27.     };  
  28.     // gesture listener   
  29.     private SimpleOnGestureListener gestureListener = new SimpleOnGestureListener(){  
  30.         @Override  
  31.         public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY){  
  32.             if (e1.getX() - e2.getX() > 100 && Math.abs(velocityX) > 50) {  
  33.                 FlipLast();  
  34.             } else if (e2.getX() - e1.getX() > 100 && Math.abs(velocityX) > 50) {  
  35.                 FlipNext();  
  36.             }else{  
  37.                 return false;  
  38.             }  
  39.             return true;  
  40.         }  
  41.     };  
  42.       
  43.     public ViewFlipperEx(ViewFlipper vf){   
  44.         Handle = vf;  
  45.         gestureDetector = new GestureDetector(gestureListener);   
  46.     }  
  47.     //switch to last page   
  48.     public void FlipLast(){   
  49.         Handle.setInAnimation(AnimationUtils.loadAnimation(Handle.getContext(), R.anim.push_left_in));  
  50.         Handle.setOutAnimation(AnimationUtils.loadAnimation(Handle.getContext(), R.anim.push_left_out));  
  51.         Handle.showPrevious();//向左   
  52.     }  
  53.     //switch to next page   
  54.     public void FlipNext(){  
  55.         Handle.setInAnimation(AnimationUtils.loadAnimation(Handle.getContext(), R.anim.push_right_in));  
  56.         Handle.setOutAnimation(AnimationUtils.loadAnimation(Handle.getContext(), R.anim.push_right_out));  
  57.         Handle.showNext();//向右   
  58.     }  
  59.     //add view that can response gesture to flip page   
  60.     public void AddGestureView(View view){  
  61.         view.setLongClickable(true);  
  62.         view.setOnTouchListener(touchListener);  
  63.     }  
  64. }  
package talent.library;

import talent.pad.R;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.View.OnTouchListener;
import android.view.animation.AnimationUtils;
import android.widget.ViewFlipper;

public class ViewFlipperEx{
	//public member
	public final ViewFlipper Handle;
	//private variant
	private GestureDetector gestureDetector;	
    // touch listener
    private OnTouchListener touchListener = new OnTouchListener(){
		@Override
		public boolean onTouch(View v, MotionEvent event) {
			if(!gestureDetector.onTouchEvent(event)){
				com.Logi(""+Handle.getDisplayedChild());//获取当前显示的视图索引
				return false;
			}
			return true;
		}
    };
    // gesture listener
    private SimpleOnGestureListener gestureListener = new SimpleOnGestureListener(){
		@Override
		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY){
			if (e1.getX() - e2.getX() > 100 && Math.abs(velocityX) > 50) {
				FlipLast();
			} else if (e2.getX() - e1.getX() > 100 && Math.abs(velocityX) > 50) {
				FlipNext();
			}else{
				return false;
			}
			return true;
		}
    };
	
	public ViewFlipperEx(ViewFlipper vf){ 
		Handle = vf;
		gestureDetector = new GestureDetector(gestureListener); 
	}
	//switch to last page
	public void FlipLast(){ 
		Handle.setInAnimation(AnimationUtils.loadAnimation(Handle.getContext(), R.anim.push_left_in));
		Handle.setOutAnimation(AnimationUtils.loadAnimation(Handle.getContext(), R.anim.push_left_out));
        Handle.showPrevious();//向左
	}
	//switch to next page
	public void FlipNext(){
		Handle.setInAnimation(AnimationUtils.loadAnimation(Handle.getContext(), R.anim.push_right_in));
		Handle.setOutAnimation(AnimationUtils.loadAnimation(Handle.getContext(), R.anim.push_right_out));
		Handle.showNext();//向右
	}
	//add view that can response gesture to flip page
	public void AddGestureView(View view){
		view.setLongClickable(true);
		view.setOnTouchListener(touchListener);
	}
}
  • isFlipping: 用来判断View切换是否正在进行
  • setFilpInterval:设置View之间切换的时间间隔
  • startFlipping:使用上面设置的时间间隔来开始切换所有的View,切换会循环进行
  • stopFlipping: 停止View切换