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

来源:互联网 发布:亿图数控系统磨床编程 编辑:程序博客网 时间:2024/05/16 15:02

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



原创粉丝点击