一步一步学android控件(之二十八)—— ViewFlipper

原创 2013年12月06日 09:16:01

说到ViewFlipper控件呢就想到ImageSwitcher和TextViewSwitcher(具体使用方法参见一步一步学android控件(之十九)—— ImageSwitcher & TextSwitcher),ImageSwitcher用来在两个ImageView之间切换;TextViewSwitcher用来在两个TextView之间切换;而ViewFlipper呢支持多种类型的多个View之间切换。ViewFlipper和ImageSwitcher、TextViewSwitcher的相同点就是同一时刻都只显示一个View。

ViewFlipper也是ViewAnimator的扩展,其继承结构图如下:


下面通过一个简单的示例展示ViewFlipper的用法:

1、在ViewFlipper中添加不同类型的View。

2、了解ViewFlipper的自动播放模式(类似幻灯片),个自定义用户操作模式(用户向左滑动显示下一个View,向右滑动,显示上一个View)。

效果展示:


贴代码:

1、布局文件widget_view_flipper_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/auto_fling_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/str_auto_fling" />

        <Button
            android:id="@+id/action_fling_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/str_action_fling" />
    </LinearLayout>

    <ViewFlipper
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/view_flipper_show"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:autoStart="true"
        android:flipInterval="2000"
        android:layout_gravity="center" >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:contentDescription="@string/app_name"
            android:src="@drawable/fendou" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:contentDescription="@string/app_name"
            android:src="@drawable/image_run" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:contentDescription="@string/app_name"
            android:src="@drawable/angry_bird" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:contentDescription="@string/app_name"
            android:src="@drawable/hello_image_view" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/app_name"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    </ViewFlipper>

</LinearLayout>

属性android:autoStart="true",表示ViewFlipper自动切换。android:flipInterval="2000",切换的频率——每两秒切换一次View。


2、布局文件中使用到的字符串strings.xml

<!-- strings for ViewFlipper -->
    <string name="str_auto_fling">自动切换</string>
    <string name="str_action_fling">滑动切换</string>
    <!-- end -->

3、activity——WidgetViewFlipperActivity.java

package com.xy.zt.selfdefinewieget;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.ViewFlipper;

public class WidgetViewFlipperActivity extends Activity
        implements OnClickListener, OnTouchListener {

    public static final float MIN_GAP = 10;
    private float downX;

    private ViewFlipper mFLipper;
    private Button mAutoFling;
    private Button mActionFLing;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.widget_view_flipper_layout);
        init();
    }

    private void init() {
        mFLipper = (ViewFlipper) findViewById(R.id.view_flipper_show);
        mAutoFling = (Button) findViewById(R.id.auto_fling_btn);
        mAutoFling.setOnClickListener(this);
        mActionFLing = (Button) findViewById(R.id.action_fling_btn);
        mActionFLing.setOnClickListener(this);
    }

    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.auto_fling_btn:
                mFLipper.setAutoStart(true);
                mFLipper.setFlipInterval(1000);
                mFLipper.setOnTouchListener(null);
                mFLipper.startFlipping();
                break;
            case R.id.action_fling_btn:
                mFLipper.stopFlipping();
                mFLipper.setAutoStart(false);
                mFLipper.setOnTouchListener(this);
                break;
        }

    }

    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                downX = event.getX();
                break;
            case MotionEvent.ACTION_UP:
                float upX = event.getX();
                if (upX - downX > MIN_GAP) {
                    mFLipper.showPrevious();
                } else if (upX - downX <= MIN_GAP) {
                    mFLipper.showNext();
                }
                break;
            case MotionEvent.ACTION_CANCEL:
                return false;

        }
        return true;
    }

}
在onTouch方法中根据水平滑动距离判断,是向左滑动则显示下一个View,向右滑动则显示上一个View。


4、在ViewData.java中添加如下内容(此部分内容可选):

public static final int VIEW_FLIPPER_ID = SLISING_DRAWER_ID + 1;
    public static final String VIEW_FLIPPER_NAME = "ViewFlipper";
private static final ViewData mViewFlipper = new ViewData(VIEW_FLIPPER_NAME,
            VIEW_FLIPPER_ID);
View_Datas.add(mViewFlipper);
WidgetsAdapter的handleItemClicked方法中添加如下内容:

case ViewData.VIEW_FLIPPER_ID:
                intent.setClass(mContext, WidgetViewFlipperActivity.class);
                mContext.startActivity(intent);
                break;

以上就是ViewFlipper的全部内容下一个控件SearchView 。



相关文章推荐

一步一步学android之基本控件——RadioGroup组件

单选按钮在开发中提供了一种多选一的操作模式,也是比较常见的一种组件,例如在选择性别的时候,在Android中可以使用标签来定义单选按钮组件,它的定义如下(http://developer.androi...

一步一步学android控件(之十二) —— DatePicker

DatePicker ——日期选择器,使用该控件确保了用户选择的日期是有效的。DatePicker还自适应用户的语言环境(用户习惯)。 DatePicker有一个日期变化监听器OnDateChange...

一步一步学android控件(之十四) —— NumberPicker

NumberPicker 是用于选择一组预定义好数字的控件。比如时间hour的选择只有0—23有效,则可以通过setMinValue和setMaxValue设定。 使用该控件时需注意他的两个liste...

一步一步学android控件(之四) —— EditText

android 控件众多 , 额 , 具体多少个呢? 貌似有那么几十个吧,也没做个统计,嘿嘿!...... 有木有朋友感觉写了那么长时间的android代码,有时候想写点自己的东西的时候却发现自己好...

一步一步学android控件(之十七)—— RadioButton & RadioGroup

官方对RadioButton的说明是这样的: RadioButton有checked 和unchecked两种状态 。 当RadioButton的状态是unchecked时,用户可以press或cli...

一步一步学android控件(之二十七)—— SlidingDrawer

对于SlidingDrawer,官网上是这样解释的:SlidingDrawer将内容隐藏在屏幕之外,并且允许用户通过拖动handle将内容显示到屏幕上。一个SlidingDrawer由两个子View组...

一步一步学android之基本控件——Spinner组件

主要对spinner样式进行修改,并且提及textview跑马灯效果的实现方法

一步一步学android控件(之二十五)—— SeekBar

SeekBar扩展自ProgressBar——在ProgressBar的基础上添加了一个用户可以拖拽的thum。 SeekBar.OnSeekBarChangeListener是接收SeekBar进度...

一步一步学android控件(之二十二)—— GridView

GridView 用于显示二维滚动网格的View。同ListView一样,他的数据项也是从ListAdapter中产生。关于他的使用方法可参见官网的示例GridView 。 下面先了解下GridVie...

一步一步学android控件(之二) —— TextView

android 控件众多 , 额 , 具体多少个呢? 貌似有那么几十个吧,也没做个统计,嘿嘿!...... 有木有朋友感觉写了那么长时间的android代码,有时候想写点自己的东西的时候却发现自己好...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一步一步学android控件(之二十八)—— ViewFlipper
举报原因:
原因补充:

(最多只允许输入30个字)