android仿工厂测试功能,使用SwitcherView仿Android系统Launcher界面

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;}

};}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值