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