实现轮播的效果ViewPage:分为“假无限循环”和“真无限循环”。
首先我们要了解viewpage这个控件,这个控件主要的作用是滑动效果,它和listview类似也有个适配器PagerAdapter,因此如果我们写个适配器继承PageAdapter设置它的长度是Integer.MAX_VALUE同时在显示图片的时候通过求余的方式获取显示第几张图片的方法,那么viewpage就实现了这种假无限滑动效果。
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
这种效果可以看做是:0%4 - 1%4 - 2%4 - 3%4 - 4%4 - 5%4 - 6%4 - 7%4 - 8%4………..n%4。
真无限循环效果:3 - 0 - 1 - 2 - 3 - 0。即在首位置添加最后一张图片,在末尾位置添加最初一个图片。
上核心代码吧:
viewpage.xml
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="200dp"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<!-- 用来显示点点的 -->
<LinearLayout
android:id="@+id/viewGroup"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="30dp"
android:gravity="center_horizontal"
android:orientation="horizontal" >
</LinearLayout>
</RelativeLayout>
</FrameLayout>
ViewPageAdapter.java适配器
@Override
public void destroyItem(View container, int position, Object object) {
//不加这个判断条件的话,最后一张图片循环显示第一张图片的时候会出现黑屏
if (position != 0 && position != iv.length - 1) {
((ViewPager)container).removeView(iv[position]);
}
}
@Override
public Object instantiateItem(View container, int position) {
try {
((ViewPager)container).addView(iv[position]);
} catch (Exception e) {
e.printStackTrace();
}
return iv[position];
}
ViewPageActivity.java
@Override
public void onPageSelected(int arg0) {
//实现循环即在最后一张图片跳或在第一张图片跳时回到第一张图片或最后一张
int position = arg0;
if(arg0 == 0){
position = iv.length-2;
}else if(arg0 == iv.length-1){
position = 1;
}
if(position != arg0){
viewPager.setCurrentItem(position,false);
}
setImageBackground(position-1);
}
详细代码下载地址:http://download.csdn.net/detail/lihui_92_11_11/8569651