ViewPager循環滑動圖片集合,以及刪除圖片功能

最近在做一個項目,需要的功能,用viewPager展示圖片,可左右循環滑動,且可刪除。遇到了很多阻礙,現將自己的一些經驗總結如下。

1. 左右循環滑動:

按照ViewPager的特性:可以從第一張滑到最後一張,但是無法循環滑動。怎麼解決?

思路:在圖片集合中,多出兩個位置。第一張放置最後一張圖片,最後一個位置放置第一張圖片。中間放你的圖片集合。

代碼:

<span style="font-size:24px;">void pageSelected(int position) {
  if (position == 0) {
//當向左滑動到第一張時,就讓pager設置當前項爲圖片集合的最後一站
    mPagers.setCurrentItem(mListPhotos.size(), false);
  } else if (position == mImageViews.size() - 1) {
  //滑動到最後一張時,設置pager當前項爲圖片集合的第一張。Flase指的是不要動畫,因爲pager動畫是從右向左,我們循環播放可能會出現不對稱的情況,所以要設置爲false;  
   mPagers.setCurrentItem(1,false);
  } else {
    mPagers.setCurrentItem(position);
  }
}</span>


2. 刪除功能

遇到的問題是點擊刪除後,已刪除圖片還在,也就是調用notifyDataSetChanged()方法不能更新視圖view,但是左右滑動後,整個集合都正常了
解決方法:重寫下面的代碼後,pageadapter就會去每滑到一個position,都會去調用destroyItem()方法先毀掉這個position內容,然後再調用instantiateItem()方法重新生成view 

 

<span style="font-size:24px;">@Override public int getItemPosition(Object object) {
  return POSITION_NONE;
}</span>


另一個問題:這樣如果你的集合中已經刪除了該張圖片,那麼執行完上述代碼後,該頁面就會顯示空白。

解決方法:

<span style="font-size:24px;">@Override public void destroyItem(ViewGroup container, int position, Object object) {
  ImageView imageView = mImageViews.get(position % mImageViews.size());
  container.removeView(imageView);
  imageView.setImageBitmap(getBitmap(mCurUrl));
}</span>


這樣就可以讓他顯示刪除圖片後當前應該顯示的圖片。

希望對由此困苦的碼農有些幫助

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章