最近在做一个项目,需要的功能,用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>
这样就可以让他显示删除图片后当前应该显示的图片。
希望对由此困苦的码农有些帮助