关闭

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

标签: Android控件ViewFlipper控件切换
1302人阅读 评论(0) 收藏 举报
分类:

说到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 。



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:178649次
    • 积分:2615
    • 等级:
    • 排名:第14461名
    • 原创:89篇
    • 转载:7篇
    • 译文:5篇
    • 评论:24条