指令汇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;
}