最近在做一個項目,需要的功能,用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>
這樣就可以讓他顯示刪除圖片後當前應該顯示的圖片。
希望對由此困苦的碼農有些幫助