使用场景:在做一些耗时操作时(如:访问网络或者本地文件),提示用户数据加载中,完成后显示给用户加载出来的数据,并且是局部的数据加载。
功能很简单,下面开始详细讲解:
<?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" > <ViewFlipper android:id="@+id/viewFlipper" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text="开始加载" android:textSize="15pt" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:text="加载完毕" android:textSize="15pt" /> </ViewFlipper> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:text="其他数据" android:textSize="15pt" /> </LinearLayout> </LinearLayout>
为了节省时间就不把文字写到string.xml中了。ViewFlipper是继承自FrameLayout,所以会默认ViewFlipper标签中的每个子View都是一帧,默认显示第一帧,也就是第一个子View,在我们这个例子中,也就是内容为“开始加载”的TextView。
public class FlipperActivity extends Activity { private ViewFlipper flipper; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.flipper); flipper = (ViewFlipper) findViewById(R.id.viewFlipper); // 加入淡入淡出效果 flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.enteralpha)); flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.exitalpha)); // 开启加载数据线程 new loadThread().start(); } private class loadThread extends Thread { @Override public void run() { try { // 模拟耗时操作 Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } loadHander.sendEmptyMessage(100); } } private Handler loadHander = new Handler() { public void handleMessage(android.os.Message msg) { flipper.showNext(); } }; }
当FlipperActivity初始化完毕,会显示“开始加载”,这时加载线程也被开启,当加载线程执行完毕后,会向loadHander发送消 息,loadHander会调用ViewFlipper的showNext()方法,来显示下一帧,也就是显示内容为“加载完毕”的TextView(此处可以使任何需要显示的内容)。运行效果如下图所示: