Android ViewFlipper用法淺析


在Android應用開發中,我們經常會需要實現左右切換視圖的功能,這通常需要在LinearLayout、RelativeLayout等布局中添加ImageView來實現。如果每次只需展示一張圖片,並可以通過左右滑動屏幕來顯示前一張或者后一張圖片,就可以通過ViewFlipper或者ViewSwitcher來實現。滑動的手勢檢測主要通過MotionEvent類來實現,但在本文中是由GestureDetector類來實現的。

 

當我們需要在兩個或更多個視圖間滑動顯示時,ViewFlipper類通常是最好的選擇。使用ViewFlipper需在布局文件中添加相應的ViewFlipper內容:

<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <ViewFlipper
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/viewFlipper"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true">
    </ViewFlipper>

</RelativeLayout>
可以通過兩種方式向ViewFlipper中添加子視圖:
    > 在布局資源內添加
    > 程序化添加
在下面的示例中采用第二種方式。
接下來在Activity中向ViewFlipper程序化添加圖片:
public class MainActivity extends AppCompatActivity {

    private ViewFlipper viewFlipper;
    private GestureDetector gestureDetector;

    int[] resources = {
            R.drawable.one,
            R.drawable.two,
            R.drawable.three,
            R.drawable.four,
            R.drawable.five,
            R.drawable.six
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);

        for (int i = 0; i < resources.length; i++) {
            ImageView imageView = new ImageView(this);
            imageView.setImageResource(resources[i]);
            viewFlipper.addView(imageView);
        }
    }
}

至此,運行APP可以看到會顯示第一張圖片,但滑動屏幕並不能顯示其他圖片。下面,我們用GestureDetector類來檢測滑動動作,首先需要自定義一個繼承了SimpleOnGestureListener的類,在其中判斷滑動方向並顯示相應圖片:

class CustomGestureDetector extends GestureDetector.SimpleOnGestureListener {
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        if (e1.getX() > e2.getX()) { //如果初始觸點的X坐標比最終觸點的X坐標大表示向左滑動
            viewFlipper.showNext();
        }

        if (e1.getX() < e2.getX()) { //如果初始觸點的X坐標比最終觸點的X坐標小表示向右滑動
            viewFlipper.showPrevious();
        }

        return super.onFling(e1, e2, velocityX, velocityY);
    }
}

最后通過簡單代碼在onCreate()方法內初始化改監聽方法:

CustomGestureDetector customGestureDetector = new CustomGestureDetector();
gestureDetector = new GestureDetector(this, customGestureDetector);

並在onTouchEvent()回調中實現getstureDetector.onTouchEvent(event);

@Override
public boolean onTouchEvent(MotionEvent event){
    gestureDetector.onTouchEvent(event);

    return super.onTouchEvent(event);
}

此外,還可以通過ViewFlipper為圖片切換增加動畫效果:

viewFlipper.setInAnimation(this, android.R.anim.fade_in);
viewFlipper.setInAnimation(this, android.R.anim.fade_out);

如果希望應用能夠自動切換圖片,還可以通過ViewFlipper設置圖片自動播放和播放時間:

viewFlipper.setAutoStart(true);
viewFlipper.setFlipInterval(2000);

 

 

 

參考:

http://codetheory.in/android-viewflipper-and-viewswitcher/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM