歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android ViewFliper實現屏幕切換

Android ViewFliper實現屏幕切換

日期:2017/3/1 10:47:34   编辑:Linux編程

ViewFlipper 可以包含多個View 且View之間的切換可以通過Animation來設置切換效果,如漸變。

xml布局:

ViewFlipper裡面有四個頁面,下面通過手勢切換頁面。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical" android:layout_width="fill_parent"
  4. android:background="@drawable/static_bg_snowy_day"
  5. android:layout_height="fill_parent">
  6. <ViewFlipper android:id="@+id/flipper"
  7. android:layout_width="fill_parent" android:layout_height="fill_parent">
  8. <include android:id="@+id/firstlayout" layout="@layout/first"></include>
  9. <include android:id="@+id/secondlayout" layout="@layout/second"></include>
  10. <include android:id="@+id/thirdlayout" layout="@layout/third"></include>
  11. <include android:id="@+id/fourthlayout" layout="@layout/fourth"></include>
  12. </ViewFlipper>
  13. </LinearLayout>


  1. public class viewflipper extends Activity implements OnGestureListener,
  2. OnTouchListener {
  3. private ViewFlipper mFlipper;
  4. GestureDetector mGestureDetector;
  5. private int mCurrentLayoutState;
  6. private static final int FLING_MIN_DISTANCE = 100;
  7. private static final int FLING_MIN_VELOCITY = 200;
  8. @Override
  9. public void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.flipper);
  12. mFlipper = (ViewFlipper) findViewById(R.id.flipper);
  13. // 注冊一個用於手勢識別的類
  14. mGestureDetector = new GestureDetector(this);
  15. // 給mFlipper設置一個listener
  16. mFlipper.setOnTouchListener(this);
  17. mCurrentLayoutState = 0;
  18. // 允許長按住ViewFlipper,這樣才能識別拖動等手勢
  19. mFlipper.setLongClickable(true);
  20. }
  21. public boolean onDown(MotionEvent e) {
  22. return false;
  23. }
  24. /**
  25. * 用戶按下觸摸屏、快速移動後松開即觸發這個事件 e1:第1個ACTION_DOWN MotionEvent e2:最後一個ACTION_MOVE
  26. * MotionEvent velocityX:X軸上的移動速度,像素/秒 velocityY:Y軸上的移動速度,像素/秒 觸發條件 :
  27. * X軸的坐標位移大於FLING_MIN_DISTANCE,且移動速度大於FLING_MIN_VELOCITY個像素/秒
  28. */
  29. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
  30. float velocityY) {
  31. if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
  32. && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
  33. // 當像左側滑動的時候
  34. // 設置View進入屏幕時候使用的動畫
  35. mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
  36. R.anim.push_left_in))
  37. // 設置View退出屏幕時候使用的動畫
  38. mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
  39. R.anim.push_left_out));
  40. mFlipper.showNext();
  41. } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
  42. && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
  43. // 當像右側滑動的時候
  44. mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
  45. R.anim.push_right_in));
  46. mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
  47. R.anim.push_right_out));
  48. mFlipper.showPrevious();
  49. }
  50. return false;
  51. }
  52. public void onLongPress(MotionEvent e) {
  53. }
  54. public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
  55. float distanceY) {
  56. return false;
  57. }
  58. public void onShowPress(MotionEvent e) {
  59. }
  60. public boolean onSingleTapUp(MotionEvent e) {
  61. return false;
  62. }
  63. public boolean onTouch(View v, MotionEvent event) {
  64. // 一定要將觸屏事件交給手勢識別類去處理(自己處理會很麻煩的)
  65. return mGestureDetector.onTouchEvent(event);
  66. }
  67. }

進入動畫

  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>
Copyright © Linux教程網 All Rights Reserved