Android ViewFlipper用法浅析

Android ViewFlipper用法浅析在Android应用开发中,我们经常会需要实现左右切换视图的功能,这通常需要在LinearLayout、RelativeLayout等布局中添加ImageView来实现。如果每次只需展示一张图片,并可以通过左右滑动屏幕来显示前一张或者后一张图片,就可以通过ViewFlipper或者ViewSwitc

大家好,欢迎来到IT知识分享网。Android

在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);

 

 

 

参考:

Android ViewFlipper and ViewSwitcher with GestureDetector Swipes/Flings

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/34329.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信