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/

时间: 2024-10-26 11:09:48

Android ViewFlipper用法浅析的相关文章

ViewSwitcher用法浅析

如果理解了ViewPager的使用方法,使用ViewSwitcher就方便多了.和ViewFlipper一样,ViewSwitcher也是ViewAnimator的子类,并且只能包含两个子视图,每次展示其中一个视图.可以像ViewFlipper一样添加子视图或者通过工厂创建视图. 如果使用类似ViewFlipper用法浅析中的ViewFlipper添加图片的方法: int[] resourses = { R.drawable.one, R.drawable.two }; viewSwitcher

从 ListView 到 RecyclerView 的用法浅析

文章目录 要走好明天的路,必须记住昨天走过的路,思索今天正在走着的路. ListView,一种在垂直滚动列表中显示条目的视图:RecyclerView,一种在局限的窗口呈现大数据集合的灵活视图.RecyclerView 部件是 ListView 的一种更高级且更灵活的版本. 以上描述来自官网. 移动设备屏幕空间有限,导致在屏幕上一次性显示的内容也是有限的.当需要显示大量的数据时,设想有这样的控件,可以帮助用户只通过手指上下滑动,就可以让屏幕外的数据滚动到屏幕内,同时,屏幕上原有的数据会滚动出屏幕

Android源码浅析(一)——VMware Workstation Pro和Ubuntu Kylin 16.04 LTS安装配置

Android源码浅析(一)--VMware Workstation Pro和Ubuntu Kylin 16.04 LTS安装配置 最近地方工作,就是接触源码的东西了,所以好东西还是要分享,系列开了这么多,完结 的也没几个,主要还是自己覆盖的太广了,却又不精通,嘿嘿,工作需要,所以写下了本篇博客 一.VMware 12 我选择的虚拟机试VMware,挺好用的感觉,下载VMware就不说了,善用搜索键嘛,这里我提供一个我现在在用的 下载地址:链接:http://pan.baidu.com/s/1k

Android Bitmap 用法总结

android Bitmap用法总结 Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 1.Drawable → Bitmap public static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitmap .createBitmap( drawable.getIntrinsicWidth(), drawable.getIntrinsi

android Bitmap用法总结

Bitmap用法总结1.Drawable → Bitmappublic static Bitmap drawableToBitmap(Drawable drawable) {Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight(),drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_888

Android ViewPager 用法

Android ViewPager 用法 场景:一般第一次打开应用程序时,程序会有一个提示页来给展现应用程序都有哪些功能:或者程序更新时,又更新哪些新特性,都可以使用ViewPager Demo 描述:实现三个界面的相互切换,页面颜色分别为红,绿,蓝 activity_main: 主界面只添ViewPager这一个控件 android:overScrollMode="never" 作用是当页面已经滑动到最左边或最右时,去掉阴影 <?xml version="1.0&qu

Javascript属性:addEvent()用法浅析

做 web 应用的人,经常会用到 Javascript 来处理页面上的一些事情.表单验证我们不谈,在根据用户使用情况,显示/隐藏,或者执行一段 js function,的时候,我们需要和页面的 DOM 树打交道.看看 Gmail ,发送邮件,按下"发送"钮后,用 Ajax 在后端发送邮件内容,根据返回的状态,在编辑页面的上方直接显示一小段文字"您的邮件已经发送.". 通常的思想,我们会在那个发送按钮里面写上: onclick="javascript:sen

Android HttpClient 用法以及乱码解决

一.Post提交 并可以实现多文件上传 // 创建DefaultHttpClient对象 HttpClient httpclient = new DefaultHttpClient(); // 创建一个HttpGet对象 HttpPost post = new HttpPost(realUrl); MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); if (params != nu

(Android系统)android log机制浅析

在android下面debug,最主要的方式就是用logcat抓log了,我们可能有尝试过使用printf来打印,当然结果是不行的,这里有时间就看了一下android平台下log的flow,在此做个笔记以作记录 我们一般使用ALOGD来打印log,所以这里就跟一下ALOGD的flow system/core/include/log/log.h system/core/include/log/log.h #ifndef ALOGD #define ALOGD(...) ((void)ALOG(LO