<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 本節引言: > 本節給大家帶了的是ViewFlipper,它是Android自帶的一個多頁面管理控件,且可以自動播放! 和ViewPager不同,ViewPager是一頁頁的,而ViewFlipper則是一層層的,和ViewPager一樣,很多時候, 用來實現進入應用后的引導頁,或者用于圖片輪播,本節我們就使用ViewFlipper寫一個簡單的圖片 輪播的例子吧~官方API:[ViewFlipper](http://androiddoc.qiniudn.com/reference/android/widget/ViewFlipper.html) * * * ## 1.為ViewFlipper加入View的兩種方法 ### 1)靜態導入 > 所謂的靜態導入就是像圖中這樣,把個個頁面添加到ViewFlipper的中間! ![](https://box.kancloud.cn/2015-12-01_565da65146d39.jpg) * * * ### 2)動態導入 > 通過addView方法填充View ![](https://box.kancloud.cn/2015-12-01_565da651a3690.jpg) * * * ## 2.常用的一些方法 > * **setInAnimation**:設置View進入屏幕時使用的動畫 > * **setOutAnimation**:設置View退出屏幕時使用的動畫 > * **showNext**:調用該方法來顯示ViewFlipper里的下一個View > * **showPrevious**:調用該方法來顯示ViewFlipper的上一個View > * **setFilpInterval**:設置View之間切換的時間間隔 > * **setFlipping**:使用上面設置的時間間隔來開始切換所有的View,切換會循環進行 > * **stopFlipping**:停止View切換 * * * ## 3.使用實例 ### 1)示例1:使用ViewFlipper實現圖片輪播(靜態導入) **實現效果圖**: ![](https://box.kancloud.cn/2015-12-01_565da651bba71.jpg) **實現代碼**: 每個頁面的布局都是一個簡單的ImageView,這里就不貼了~先貼下兩個進入以及 離開的動畫: **right_in.xml**: ~~~ <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="2000" android:fromXDelta="100%p" android:toXDelta="0" /> </set> ~~~ **right_out.xml**: ~~~ <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="2000" android:fromXDelta="0" android:toXDelta="-100%p" /> </set> ~~~ 然后是**activity_main.xml**布局文件: ~~~ <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <ViewFlipper android:id="@+id/vflp_help" android:layout_width="match_parent" android:layout_height="match_parent" android:inAnimation="@anim/right_in" android:outAnimation="@anim/right_out" android:flipInterval="3000"> <include layout="@layout/page_help_one" /> <include layout="@layout/page_help_two" /> <include layout="@layout/page_help_three" /> <include layout="@layout/page_help_four" /> </ViewFlipper> </RelativeLayout> ~~~ 這里我們設置了flipInterval = 3000,即每隔3000ms切還一個~ 最后我們只需在MainActivity.java中調用ViewFlipper的startFlipping()方法開始滑動! **MainActivity.java:** ~~~ public class MainActivity extends AppCompatActivity { private ViewFlipper vflp_help; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); vflp_help = (ViewFlipper) findViewById(R.id.vflp_help); vflp_help.startFlipping(); } } ~~~ * * * ### 2)示例2:支持手勢滑動的ViewFlipper(動態導入) **實現效果圖**: ![](https://box.kancloud.cn/2015-12-01_565da65468980.jpg) **代碼實現**: 因為我們分為進入上一頁,進入下一頁,所以除了上面的兩個動畫外,我們再添加兩個動畫: **left_in.xml**: ~~~ <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="500" android:fromXDelta="-100%p" android:toXDelta="0" /> </set> ~~~ **left_out.xml**: ~~~ <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="500" android:fromXDelta="0" android:toXDelta="100%p" /> </set> ~~~ **MainActivity.java**: ~~~ public class MainActivity extends AppCompatActivity { private Context mContext; private ViewFlipper vflp_help; private int[] resId = {R.mipmap.ic_help_view_1,R.mipmap.ic_help_view_2, R.mipmap.ic_help_view_3,R.mipmap.ic_help_view_4}; private final static int MIN_MOVE = 200; //最小距離 private MyGestureListener mgListener; private GestureDetector mDetector; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = MainActivity.this; //實例化SimpleOnGestureListener與GestureDetector對象 mgListener = new MyGestureListener(); mDetector = new GestureDetector(this, mgListener); vflp_help = (ViewFlipper) findViewById(R.id.vflp_help); //動態導入添加子View for(int i = 0;i < resId.length;i++){ vflp_help.addView(getImageView(resId[i])); } } //重寫onTouchEvent觸發MyGestureListener里的方法 @Override public boolean onTouchEvent(MotionEvent event) { return mDetector.onTouchEvent(event); } //自定義一個GestureListener,這個是View類下的,別寫錯哦!!! private class MyGestureListener extends GestureDetector.SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float v, float v1) { if(e1.getX() - e2.getX() > MIN_MOVE){ vflp_help.setInAnimation(mContext,R.anim.right_in); vflp_help.setOutAnimation(mContext, R.anim.right_out); vflp_help.showNext(); }else if(e2.getX() - e1.getX() > MIN_MOVE){ vflp_help.setInAnimation(mContext,R.anim.left_in); vflp_help.setOutAnimation(mContext, R.anim.left_out); vflp_help.showPrevious(); } return true; } } private ImageView getImageView(int resId){ ImageView img = new ImageView(this); img.setBackgroundResource(resId); return img; } } ~~~ **代碼要點解析**: > 1.這里我們通過動態的方法添加View,這里只是簡單的ImageView,可根據自己需求進行擴展! 2.相信細心的你發現了,這里我們的手勢用的不是通過onTouchEvent直接判斷的,然后重寫 onTouch事件,對Action進行判斷,然后如果是MotionEvent.ACTION_MOVE的話,就執行下述代碼: > > ![](https://box.kancloud.cn/2015-12-01_565da65594028.jpg) > > 后來發現,模擬器上因為是鼠標的關系,并不會頻繁的抖動,而真機上,因為手指一直是顫抖的 所以ACTION_MOVE會一直觸發,然后View一直切換,后來考慮了**Berial(B神)**的建議,加入了 一個值來進行判斷,就是添加一個標志: > > ![](https://box.kancloud.cn/2015-12-01_565da656307cf.jpg) > > 可以是可以,不過感覺還是有點不流暢,怪怪的,后來想想還是用手勢類,直接在onFling處理 就好,于是就有了上面的代碼,運行起來杠杠滴~ 當然,如果你對Gesture手勢不熟悉的話,可以參見之前寫過的一篇文章:[Android基礎入門教程——3.8 Gesture(手勢)](http://www.runoob.com/w3cnote/android-tutorial-gestures.html) * * * ## 4.代碼示例下載 [ViewFlipperDemo.zip](http://www.runoob.com/wp-content/uploads/2015/09/ViewFlipperDemo.zip) [ViewFlipperDemo2.zip](http://www.runoob.com/wp-content/uploads/2015/09/ViewFlipperDemo2.zip) * * * ## 本節小結: > 好的,本節給大家講解了ViewFlipper(翻轉視圖)的基本使用,以后做圖片輪播和引導頁, 你就多了一個選擇了~嗯,就說這么多,謝謝~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看