public classMainActivity extendsActivity
{
// 定义一个常量,用于显示每屏显示的应用程序数public static final intNUMBER_PER_SCREEN= 16;// 代表应用程序的内部类,public static classDataItem
{
// 应用程序名称publicString dataName;// 应用程序图标publicDrawable drawable;}
// 保存系统所有应用程序的List集合privateArrayList items= newArrayList();// 记录当前正在显示第几屏的程序private intscreenNo= -1;// 保存程序所占的总屏数private intscreenCount;ViewSwitcher switcher;// 创建LayoutInflater对象LayoutInflater inflater;@Overridepublic voidonCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.main);inflater= LayoutInflater.from(MainActivity.this);// 创建一个包含40个元素的List集合,用于模拟包含40个应用程序for(inti = 1;i < 51;i++)
{
String label = ""+ i;Drawable drawable = getResources().getDrawable(
R.drawable.zip);DataItem item = newDataItem();item.dataName= label;item.drawable= drawable;items.add(item);}
// 计算应用程序所占的总屏数// 如果应用程序的数量能整除NUMBER_PER_SCREEN,除法的结果就是总屏数// 如果不能整除,总屏数应该是除法的结果再加1screenCount= items.size() % NUMBER_PER_SCREEN== 0?
items.size()/ NUMBER_PER_SCREEN:
items.size() / NUMBER_PER_SCREEN+ 1;switcher= (ViewSwitcher) findViewById(R.id.viewSwitcher);switcher.setFactory(newViewSwitcher.ViewFactory()
{
// 实际上就是返回一个GridView组件@OverridepublicView makeView()
{
// 加载R.layout.slidelistview组件,实际上就是一个GridView组件returninflater.inflate(R.layout.slidelistview, null);}
});// 页面加载时先显示第一屏next(null);}
public voidnext(View v)
{
if(screenNo< screenCount- 1)
{
screenNo++;// 为ViewSwitcher的组件显示过程设置动画switcher.setInAnimation(this,R.anim.slide_in_right);// 为ViewSwitcher的组件隐藏过程设置动画switcher.setOutAnimation(this,R.anim.slide_out_left);// 控制下一屏将要显示的GridView对应的Adapter((GridView) switcher.getNextView()).setAdapter(adapter);// 单击右边按钮,显示下一屏// 学习手势检测后,也可通过手势检测实现显示下一屏switcher.showNext();// ①}
}
public voidprev(View v)
{
if(screenNo> 0)
{
screenNo--;// 为ViewSwitcher的组件显示过程设置动画switcher.setInAnimation(this,android.R.anim.slide_in_left);// 为ViewSwitcher的组件隐藏过程设置动画switcher.setOutAnimation(this,android.R.anim.slide_out_right);// 控制下一屏将要显示的GridView对应的 Adapter((GridView) switcher.getNextView()).setAdapter(adapter);// 单击左边按钮,显示上一屏,当然可以采用手势// 学习手势检测后,也可通过手势检测实现显示上一屏switcher.showPrevious();//②}
}
// 该BaseAdapter负责为每屏显示的GridView提供列表项privateBaseAdapter adapter= newBaseAdapter()
{
@Overridepublic intgetCount()
{
// 如果已经到了最后一屏,且应用程序的数量不能整除NUMBER_PER_SCREENif(screenNo== screenCount- 1&& items.size() % NUMBER_PER_SCREEN!= 0)
{
// 最后一屏显示的程序数为应用程序的数量对NUMBER_PER_SCREEN求余returnitems.size() % NUMBER_PER_SCREEN;}
// 否则每屏显示的程序数量为NUMBER_PER_SCREENreturnNUMBER_PER_SCREEN;}
@OverridepublicDataItem getItem(intposition)
{
// 根据screenNo计算第position个列表项的数据returnitems.get(screenNo* NUMBER_PER_SCREEN+ position);}
@Overridepublic longgetItemId(intposition)
{
returnposition;}
@OverridepublicView getView(intposition
,View convertView,ViewGroup parent)
{
View view = convertView;if(convertView == null)
{
// 加载R.layout.labelicon布局文件view = inflater.inflate(R.layout.labelicon, null);}
// 获取R.layout.labelicon布局文件中的ImageView组件,并为之设置图标ImageView imageView = (ImageView)
view.findViewById(R.id.imageview);imageView.setImageDrawable(getItem(position).drawable);// 获取R.layout.labelicon布局文件中的TextView组件,并为之设置文本TextView textView = (TextView)
view.findViewById(R.id.textview);textView.setText(getItem(position).dataName);returnview;}
};}