viewFlipperの概要と簡単な応用--ページをスライドする機能


先日、ViewFlipperを利用して、資料を整理して、後で使うために、まずViewFlipper類の継承関係を見てみましょう.
java.lang.Object
android.view.View
         android.view.ViewGroup
                   android.widget.FrameLayout
                            android.widget.ViewAnimator
                                     android.widget.ViewFlipper

FrameLayoutとViewAnimatorを継承し、彼の概要を見てみましょう.
       Simple  ViewAnimator  that will animate between two or more views that have been added to it. Only one child is shown at a time. If requested, can automatically flip between each child at a regular interval.(ViewFlipperに追加された2つ以上のビューの間で簡単なViewAnimatorアニメーションが実行されます.一度に1つのサブビューしか表示できません.必要に応じて、サブビューのスライドのように自動的に表示する間隔を設定できます).
彼の主なxml属性と共通の方法:
       
属性名
説明
android:autoStart
trueに設定すると、自動起動アニメーションはブール値でなければなりません.属性値はtrueまたはfalse(グローバルリソース属性R.attr.autoStartに対応)です.
android:flipInterval
次のビューを表示する間隔
 
        
public bool isAutoStart ()
                 startFlipping()  ,   true
 
  public bool isFlipping()
           ,   true
 
  public bool setAutoStart (bool autoStart)
                    startFlipping()  
 
  public bool setFlipInterval (int milliseconds)
            
     milliseconds       
 
  public bool startFlipping ()
               
   
  public bool stopFlipping ()
                                                                                                                                                                                                                                                                 

     
 setInAnimation()                                                                                                                                                                                                                           View           。          ,
            ,   android.view.animation.Animation;
            ,   Context int,   Context     Animation resourceID。
           Animation  ,        Animation   resourceID。
    setOutAnimation()                                                                                                                                                                                                                     View           。     setInAnimation    。
    showNext()                                                                                                                                                                                                                           FrameLayout      View。
    showPrevious()                                 FrameLayout      View。

以上の内容は農民のおじさんのブログを参考にします.http://www.cnblogs.com/over140/archive/2010/12/06/1897439.html
ViewFlipperの基本的な知識については、まずたくさん話します.簡単な例を見てみましょう.
public class TestFlip extends Activity implements OnGestureListener {

	private ViewFlipper flipper;
	private GestureDetector detector;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		detector = new GestureDetector(this);
		flipper = (ViewFlipper) this.findViewById(R.id.ViewFlipper01);
		flipper.addView(addTextView("step 1"));
		flipper.addView(addTextView("step 2"));
		flipper.addView(addTextView("step 3"));
		flipper.addView(addTextView("step 4"));
		flipper.addView(addTextView("step 5"));
	}

	private View addTextView(String text) {
		TextView tv = new TextView(this);
		tv.setText(text);
		tv.setGravity(1);
		return tv;
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		return this.detector.onTouchEvent(event);
	}

	@Override
	public boolean onDown(MotionEvent e) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
		if (e1.getX() - e2.getX() > 120) {
			this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in));
			this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out));
			this.flipper.showNext();
			return true;
		} else if (e1.getX() - e2.getX() < -120) {
			this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_in));
			this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_out));
			this.flipper.showPrevious();
			return true;
		}
		return false;
	}

	@Override
	public void onLongPress(MotionEvent e) {
		// TODO Auto-generated method stub
	}

	@Override
	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
			float distanceY) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void onShowPress(MotionEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public boolean onSingleTapUp(MotionEvent e) {
		// TODO Auto-generated method stub
		return false;
	}
}

この例では、簡単なアニメーション効果を使用していますが、ページを飛びたい場合は?つまり、以下にいくつかのページタグがあり、クリックして対応するページに入ると、どのように実現しますか?
public void switchLayoutStateTo(int switchTo) {  
        while (mCurrentLayoutState != switchTo) {  
            if (mCurrentLayoutState > switchTo) {  
                mCurrentLayoutState--;  
                this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_in));
		this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_out));
		this.flipper.showPrevious();
} else { mCurrentLayoutState++; this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in));
		this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out));
		this.flipper.showNext();
} } ; }
mCrrentLayoutStatesは のページ です.
に、GestureDetectorというジェスチャークラスが です.このクラスは なジェスチャーイベントを し、2つのコールバックインタフェースがそれぞれ のイベントを するために されます.
       GestureDetector.OnDoubleTapListener:マウスのダブルクリックイベントに たDoubleTapイベントを するために されます.このインタフェースには、 の3つのコールバック があります.
     
1.   onDoubleTap(MotionEvent e):  DoubleTap  ,
2.   onDoubleTapEvent(MotionEvent e):  DoubleTap      ,  down、up move  (               ,             DoubleTap  ,  DoubleTap        down up  ,           );
3.   onSingleTapConfirmed(MotionEvent e):         SingleTap   DoubleTap,          DoubleTap  ,       ,OPhone                          SingleTap   DoubleTap,    SingleTapConfirmed  。

      
       GestureDetector.OnGestureListener: のジェスチャーイベントを するために されます.このインタフェースには、 の6つのコールバック があります.
1.   onDown(MotionEvent e):down  ;
2.   onSingleTapUp(MotionEvent e):    up  ;
3.   onShowPress(MotionEvent e):down     move  up          ;
4.   onLongPress(MotionEvent e):    ;
5.   onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):      ;
6.   onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):        。

コードを てみましょう. な はonFling()メソッドです.
@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
		if (e1.getX() - e2.getX() > 120) {
			this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in));
			this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out));
			this.flipper.showNext();
			return true;
		} else if (e1.getX() - e2.getX() < -120) {
			this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_in));
			this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_out));
			this.flipper.showPrevious();
			return true;
		}
		return false;
	}

スライド が120 pxより きいと、 のインタフェースに ります.にある
onFling()メソッドには4つのパラメータがあり、e 1が のACTION_DOWN MotionEvent,e 2 のACTION_MOVE MotionEvent
かりやすいです.スライド 、パラメータvelocityX、velocityYを ることができますか?velocityXとvelocityYは にはX とY の であり、 は / である.この2つのパラメータを み わせると,スライドの を し,より くの を うことができる.
ページをめくる
                   
ViewPageを したクラスlauncher のスライド
ページスライド り え(クラスLauncherスライドスクリーン )
Launcher -- スライドスクリーン ソース
では、ここまで きましょう. のコード:
http://download.csdn.net/detail/aomandeshangxiao/4192243