指令汇B新闻客户端开发(四) 自动轮播条

    在这个新闻客户端,我们可以看到有一个轮播页面,在这个项目中,用Handler和一个定时器来做更容易一些,

我们定义一个Handler:

private Handler mHandler;




定时器的代码如下:

// 自动轮播条显示
			if (mHandler == null) {
				mHandler = new Handler() {
					public void handleMessage(android.os.Message msg) {
						int currentItem = mViewPager.getCurrentItem();

						if (currentItem < mTopNewsList.size() - 1) {
							currentItem++;
						} else {
							currentItem = 0;
						}

						mViewPager.setCurrentItem(currentItem);// 切换到下一个页面
						mHandler.sendEmptyMessageDelayed(0, 3000);// 继续延时3秒发消息,
																	// 形成循环
					};
				};

				mHandler.sendEmptyMessageDelayed(0, 3000);// 延时3秒后发消息
			}

轮播条的触摸监听:

class TopNewsTouchListener implements OnTouchListener {

		@Override
		public boolean onTouch(View v, MotionEvent event) {
			switch (event.getAction()) {
			case MotionEvent.ACTION_DOWN:
			//	System.out.println("按下");
				mHandler.removeCallbacksAndMessages(null);// 删除Handler中的所有消息
				// mHandler.postDelayed(new Runnable() {
				//
				// @Override
				// public void run() {
				//
				// }
				// }, 3000);
				break;
			case MotionEvent.ACTION_CANCEL:
				System.out.println("事件取消");
				mHandler.sendEmptyMessageDelayed(0, 3000);
				break;
			case MotionEvent.ACTION_UP:
				System.out.println("抬起");
				mHandler.sendEmptyMessageDelayed(0, 3000);
				break;

			default:
				break;
			}

			return true;
		}

	}


// 表示事件是否拦截, 返回false表示不拦截, 可以让嵌套在内部的viewpager相应左右划的事件
@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
return false;
}


原文地址:https://www.cnblogs.com/xiaowangba/p/6314912.html