老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

AndroidViewPager導航小圓點實現無限循環效果

之前用View Pager做了一個圖片切換的推薦欄(就類似與淘寶、頭條客戶端頂端的推薦信息欄),利用View Pager很快就能實現,但是一次無意間使用淘寶APP的時候,突然發現它的效果和我做的還不一樣,淘寶APP的推薦欄可以左右無限循環切換,而ViewPager自身其實并沒有支持這個功能。

創新互聯長期為上千家客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為通州企業提供專業的網站設計、成都做網站通州網站改版等技術服務。擁有10年豐富建站經驗和眾多成功案例,為您定制開發。

其實實現這個無限循環不難,只需要在數據源的首尾各添加一張多余的圖片,在onPagerChangeListener()中監聽position<1和position>(總數據條目-1)就可以了。另外一點需要注意的是,這里的數據源+2,而導航小圓點卻比數據源少2,這樣在無限循環的時候,小圓點的切換就不好辦了。本人最開始也是寫邏輯在onPageSelected()里面判斷條件,總感覺挺麻煩的,有沒有更好的實現方式呢。答案是肯定的。只需將小圓點也首尾各家一個,并設置為invisible不就好了?

我的代碼實現如下:

xml布局:

<?xml version="1.0" encoding="utf-8"?>


  

  


    

    

    

    

    

    
  


界面實現:

public class HomePageFragment extends BaseFragment {

  private View view;
  private ViewPager mViewPager;//頂部信息推薦欄
  private MyViewPagerAdapter mViewPagerAdapter;
  private LinearLayout ll_dots_homepage_top;//頂部信息推薦欄導航點
  private int GUIDE_NUMBER = 4; //頂部信息推薦欄的數量
  private ImageView[] dotImages; //頂部信息推薦欄引導小圓點
  private int dotCurrentIndex; //頂部信息推薦欄小圓點偏移量
  private MyOnPageChangeListener mOnPageChangeListener;

  private List mListDataViewPage;
  private Context context;

  @Override
  public void onAttach(Context context) {
    super.onAttach(context);
    this.context = context;
  }

  @Nullable
  @Override
  public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable
      Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.frament_homepage, container, false);

    initData();
    initView();

    return view;
  }

  /**
   * 初始化一些基礎數據
   */
  private void initData() {
    if (mListDataViewPage != null) {
      mListDataViewPage.clear();
      mListDataViewPage = null;
    } else {
      mListDataViewPage = new ArrayList<>();
      // 為了實現無限循環,首位兩張圖片都是重復的
      int[] resource = new int[]{
          R.drawable.test_viewpager_homepage_4, R.drawable.test_viewpager_homepage_1, R.drawable.test_viewpager_homepage_2, R
          .drawable.test_viewpager_homepage_3, R.drawable.test_viewpager_homepage_4,R.drawable.test_viewpager_homepage_1,};

      for (int i = 0; i < 6; i++) {
        WeakReference bitmao = new WeakReference(BitmapFactory
            .decodeResource(getResources(), resource[i]));
        ImageView imageView = new ImageView(context);
        imageView.setImageBitmap(bitmao.get());
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        mListDataViewPage.add(imageView);
      }

    }

  }

  /**
   * 初始化底部推信息推薦欄引導小圓點View
   */
  private void initDots() {
    dotImages = new ImageView[mListDataViewPage.size()];
    for (int i = 0; i < mListDataViewPage.size(); i++) {
      dotImages[i] = (ImageView) ll_dots_homepage_top.getChildAt(i);
      dotImages[i].setEnabled(false);
    }
    **//將第一個小圓點設置為高亮,這里的第一個偏移量是1,不是0
    dotImages[1].setEnabled(true);
    dotCurrentIndex = 1;**
  }

  /**
   * initView
   */
  private void initView() {
    findLayout();
    findView();
  }

  /**
   * findLayout
   */
  private void findLayout() {
    ll_dots_homepage_top = (LinearLayout) view.findViewById(R.id.ll_dots_homepage_top);
    initDots();

  }

  /**
   * 初始化控件
   */
  private void findView() {
    mViewPager = (ViewPager) view.findViewById(R.id.vp_homepage);

    mViewPagerAdapter = new MyViewPagerAdapter(mListDataViewPage);
    mOnPageChangeListener = new MyOnPageChangeListener();
    mViewPager.setAdapter(mViewPagerAdapter);
    mViewPager.setOnPageChangeListener(mOnPageChangeListener);
    **mViewPager.setCurrentItem(1,false); //默認選中第二張圖片**
  }

  private class MyOnPageChangeListener implements ViewPager.OnPageChangeListener {

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
      if (position < 0 || position > mListDataViewPage.size() || position == dotCurrentIndex) {
        return;
      }

      if ( mListDataViewPage.size() > 1) { //多于1,才會循環跳轉
        if ( position < 1) { //首位之前,跳轉到末尾(N)
          position = 4;
          mViewPager.setCurrentItem(position,false);
        } else if ( position > 4) { //末位之后,跳轉到首位(1)
          position = 1;
          mViewPager.setCurrentItem(position,false); //false:不顯示跳轉過程的動畫

        }else {
          dotImages[dotCurrentIndex].setEnabled(false);
          dotImages[position].setEnabled(true);
          dotCurrentIndex = position;
        }
      }


    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
  }
}

注意代碼中加粗的代碼。初始的小圓點選中和ViewPager的position選中。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持創新互聯。


網頁標題:AndroidViewPager導航小圓點實現無限循環效果
文章出自:http://www.xueling.net.cn/article/iipgdj.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 亚洲日韩一区精品射精 | 国产成人精品免费视频大全 | 日韩欧美精品一区二区 | 大JI巴好深好爽又大又粗视频 | 日韩久久精品网 | xx视频在线观看免费观看 | 中文字幕精品—区二区 | 91精品久久香蕉国产线看观看 | 日本高清VA在线播放 | 国产日韩欧美不卡在线观看 | 蜜臀久久99精品久久一区二区 | 国产精品美女视频免费观看软件 | 97久久亚洲 | 国产性一级片 | 久久久久二区 | chinese猛男自慰gv网站 | 日射精情感性色视频 | 国产精品无码专区第一页 | 国产成人精品av | 老师开裆丝袜喷水视频 | 久久夜色精品亚洲 | 6080yyy午夜理论片在线观看 | 九色国产在线 | 鲁一鲁亚洲无线码 | 亚洲一区二区三区偷拍女厕 | 亚洲AV无码成人网站在线观看 | 国产偷抇久久精品a片蜜臀a | 精品国产一级毛片 | 9999人体做爰大胆视频摄影 | 亚洲免费一区三区 | 美美女高清毛片视频免费观看 | 永久免费无码网站在线观看 | 欧美日韩人成视频在线播放 | 91亚洲免费| 国产素人在线观看 | 爱情不设限在线观看 | 日本男人天堂 | 免费无码一区二区三区A片 未满小14洗澡无码视频网站 | 不卡在线一区2区三区 | 妺妺窝人体色WWW看美女 | 成av人在线 |