AdapterView继承了AdapterViewAnimator,它也会显示Adapter提供的多个View组件,但每次只能显示一个View组件,程序可通过showPrevious和showNext()方法控制该组件显示上一个、下一个组价。
AdapterViewFlipper可以在多个View切换过程中使用渐隐渐现的动画效果,除此之外,还可以调用该组件的startFlipping()控制它“自动播放”下一个View组件。
实例:自动播放的图片库
下面的实例示范了如何使用AdapterViewFlipper开发自动播放的图片库,该实例的界面上除了包含一个AdapterViewFilpper之外,还包含三个按钮,用于控制显示“上一个”、“下一个”和“自动播放”。为了控制AdapterViewFlipper要显示的多个列表项,程序为AdapterVIewFilpper设置一个Adapter即可。
下面是该实例的XML布局文件:
>
"
上面的粗体字代码定义了一个AdapterViewFlipper组件,并为三个按钮指定了事件处理方法。该实例的Activiy会采用扩展BaseAdapter的方式来实现自己的Adapte,并为AdapterViewFlipper组件设置Adapter,下面是该Activity的代码。
后台代码文件如下:
packageorg.crazyit.helloworld;importandroid.os.Bundle;importandroid.app.Activity;importandroid.view.Menu;importandroid.view.View;importandroid.view.ViewGroup;importandroid.view.ViewGroup.LayoutParams;importandroid.widget.AdapterViewFlipper;importandroid.widget.BaseAdapter;importandroid.widget.ImageView;public class AdapterViewFlipperTest extendsActivity {int[] imageIds=new int[]{
R.drawable.shuangzi,
R.drawable.shuangyu,
R.drawable.chunv,
R.drawable.tiancheng,
R.drawable.tianxie,
R.drawable.sheshou,
R.drawable.juxie,
R.drawable.shuiping,
R.drawable.shizi,
R.drawable.baiyang,
R.drawable.jinniu,
R.drawable.mojie
};
AdapterViewFlipper flipper;
@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_adapter_view_flipper_test);
flipper=(AdapterViewFlipper)findViewById(R.id.flipper);//创建一个BaseAdapter对象,该对象负责提供Gallery所显示的列表项
BaseAdapter adapter=newBaseAdapter()
{
@Overridepublic intgetCount() {//TODO Auto-generated method stub
returnimageIds.length;
}
@Overridepublic Object getItem(intposition) {//TODO Auto-generated method stub
returnposition;
}
@Overridepublic long getItemId(intposition) {//TODO Auto-generated method stub
returnposition;
}//该方法返回的View代表了每个列表项
@Overridepublic View getView(intposition, View convertView, ViewGroup parent) {//TODO Auto-generated method stub//创建一个ImageView
ImageView imageView=new ImageView(AdapterViewFlipperTest.this);
imageView.setImageResource(imageIds[position]);//设置ImageView的缩放类型
imageView.setScaleType(ImageView.ScaleType.FIT_XY);//为ImageView设置布局参数
imageView.setLayoutParams(newLayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));returnimageView;
}
};
flipper.setAdapter(adapter);
}public voidprev(View source)
{//显示上一个组件
flipper.showPrevious();//停止自动播放
flipper.stopFlipping();
}public voidnext(View source)
{//显示一个组件
flipper.showNext();//停止自动播放
flipper.stopFlipping();
}public voidauto(View source)
{//开始自动播放
flipper.startFlipping();
}
@Overridepublic booleanonCreateOptionsMenu(Menu menu) {//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.adapter_view_flipper_test, menu);return true;
}
}
上面的程序中粗体字代码调用了AdapterViewFlipper的showPrevious()、showNext()方法来控制该组件显示上一个、下一个组价,并调用了startFlipping()方法控制自动播放。
运行上面的程序出现如下效果: