private void initViewPager() {
    // indicator
    indicatorLayout = (LinearLayout) this.findViewById(R.id.indicatorLayout);
    indicatorLayout.removeAllViews();

    indicatorImageViews = new ImageView[imageURLList.size()];
    for (int i = 0; i < imageURLList.size(); i++) {
      ImageView imageView = new ImageView(this);
      imageView.setLayoutParams(new LinearLayout.LayoutParams(10, 10));
      if (i == 0) {
        imageView.setBackgroundResource(R.drawable.page_indicator_focused);
      } else {
        imageView.setBackgroundResource(R.drawable.page_indicator_unfocused);
      }

      indicatorImageViews[i] = imageView;

      LinearLayout.LayoutParams layoutParams =
          new LinearLayout.LayoutParams(
              new ViewGroup.LayoutParams(
                  LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
      layoutParams.leftMargin = 10;
      layoutParams.rightMargin = 10;
      indicatorLayout.addView(indicatorImageViews[i], layoutParams);
    }

    // http://www.trinea.cn/android/auto-scroll-view-pager/
    // ViewPager
    viewPager = (AutoScrollViewPager) this.findViewById(R.id.viewPager);
    viewPager.setInterval(3000);
    viewPager.setCycle(true);
    viewPager.setAutoScrollDurationFactor(7.0);
    viewPager.setSlideBorderMode(AutoScrollViewPager.SLIDE_BORDER_MODE_CYCLE);
    viewPager.setStopScrollWhenTouch(false);
    viewPagerAdapter = new ImagePagerAdapter(this, imageURLList);

    viewPager.setOnPageChangeListener(
        new ViewPager.OnPageChangeListener() {

          @Override
          public void onPageScrollStateChanged(int arg0) {}

          @Override
          public void onPageScrolled(int arg0, float arg1, int arg2) {}

          @Override
          public void onPageSelected(int index) {
            int position = index % imageURLList.size();
            for (int i = 0; i < imageURLList.size(); i++) {
              if (i == position) {
                indicatorImageViews[i].setBackgroundResource(R.drawable.page_indicator_focused);
              } else {
                indicatorImageViews[i].setBackgroundResource(R.drawable.page_indicator_unfocused);
              }
            }
          }
        });
    // viewPagerAdapter.setInfiniteLoop(true);
    viewPager.setAdapter(viewPagerAdapter);
    viewPager.startAutoScroll();

    final GestureDetector tapGestureDetector = new GestureDetector(this, new TapGestureListener());
    viewPager.setOnTouchListener(
        new View.OnTouchListener() {
          public boolean onTouch(View v, MotionEvent event) {
            tapGestureDetector.onTouchEvent(event);
            return false;
          }
        });
  }