您的位置:首页 > 其它

ViewFilpper实现分页效果

2014-04-28 16:03 246 查看
先贴出来效果图


分页说明:

1)每一页显示七条数据

2)当选中第一项然后再按左键的时候显示前一页,当选中最后一项并且再按右键的时候显示下一页的数据

实现原理(思路):

1)获取总数据条数,并且计算出总页数totalPage

2)为每一页提供一个列数为7的GirdView组件,把七条数据放入GirdView组件中代码说明如下:




简单的说就是每一页是GirdView,而每一页实际的数据都放在了每一页的GirdView里面;

然后通过控制遥控器的左右键调用viewFilpper.showNext()来显示下一个GirdView(里面的七条数据)和viewFlipper.showPrevious();显示前一页的数据即可。

进行翻页的思路如下:

1)定义一个pageIndex变量用来记录当前的页码,监听左右按键的down和up事件,具体的代码如下

@Override
	public boolean onKey(View v, int keyCode, KeyEvent event) {
		if (event.getAction() == KeyEvent.ACTION_DOWN) {// 键盘按下事件
			switch (keyCode) {
			case KeyEvent.KEYCODE_DPAD_LEFT:
			case KeyEvent.KEYCODE_DPAD_RIGHT://
				inGvSelected = false;
				if (viewFlipper.getChildCount() > 0
						&& pageIndex == viewFlipper.getChildCount() - 1
						&& gridViews[pageIndex] != null
						&& gridViews[pageIndex].getAdapter().getCount() == 1) {
					return true;
				}
				break;
			}
		} else if (event.getAction() == KeyEvent.ACTION_UP) {// 键盘抬起事件
			switch (keyCode) {
			case KeyEvent.KEYCODE_BACK:
				// cancel();
				// exit();
				// clearScreen();
				break;
			case KeyEvent.KEYCODE_DPAD_RIGHT:
				if (pageIndex < viewFlipper.getChildCount() - 1
						&& !inGvSelected) {
					inGvSelected = true;
					viewFlipper.setInAnimation(AnimationUtils.loadAnimation(
							mContext, R.anim.push_left_in));
					viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(
							mContext, R.anim.push_left_out));
					// viewFlipper.getOutAnimation().setAnimationListener(new
					// PDAnimationListener());
					viewFlipper.showNext();// 显示下一页
					leftImg.setVisibility(View.VISIBLE);
					gridViews[pageIndex].requestFocus();
					pageIndex++;
					if (pageIndex == totalPage - 1) {// 当到达最后一页的时候隐藏右边箭头
						rightImg.setVisibility(View.INVISIBLE);
					}

					/*
					 * if(gridViews[pageIndex] != null) { pdRecomendAdapter =
					 * (ProgramDetailRecommendAdapter
					 * )gridViews[pageIndex].getAdapter();
					 * gridViews[pageIndex].setAdapter(pdRecomendAdapter);
					 * gridViews[pageIndex].setSelection(0); }
					 */
				}
				break;
			case KeyEvent.KEYCODE_DPAD_LEFT:
				if (pageIndex > 0 && !inGvSelected) {
					inGvSelected = true;
					pageIndex--;
					viewFlipper.setInAnimation(AnimationUtils.loadAnimation(
							mContext, R.anim.push_right_in));
					viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(
							mContext, R.anim.push_right_out));
					gridViews[pageIndex].requestFocus();
					viewFlipper.showPrevious();// 显示上一页
					rightImg.setVisibility(View.VISIBLE);
					if (pageIndex == 0) {// 第一页的时候,左边的箭头隐藏
						leftImg.setVisibility(View.INVISIBLE);
					}
					/*
					 * if(gridViews[pageIndex] != null) {
					 * gridViews[pageIndex].setSelection(PAGE_SIZE - 1); }
					 */
				}
				break;
			}
		}
		return false;
	}


当然,如果想实现如下的翻页效果通过修改每页显示的数量就可以了,例如如下图所示的每页显示12个

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: