您的位置:首页 > 其它

Viewpager最后到最前循环滑动

2015-12-01 09:31 465 查看
选取自己项目里面的五张图片,然后无缝隙循环显示(提供思路和主要代码):

动态图片不知道如何传,随便上个静态图片:


    


xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" />

<LinearLayout
android:id="@+id/linearlayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
android:orientation="horizontal" >
</LinearLayout>

<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/hello_world" />

</LinearLayout>


定义当前页为300(这样最前最后滚动才可以):

private int currentIndex=300;//当前页面的下标


将各自的imageView放在对应的容器里面:

for (int i = 0; i < imagePath.length; i++) {
//广告图片
ImageView img=new ImageView(this);
img.setImageResource(imagePath[i]);
views.add(img);
//圈的图片
ImageView img_circle=new ImageView(this);
img_circle.setImageResource(R.drawable.v_no);//默认没有选中
img_circle.setPadding(10, 5, 10, 5);
linearlayout.addView(img_circle);
}


设置当前页,并设置adapter:

//适配器
adapter=new MyAdapter();
viewpager.setAdapter(adapter);
viewpager.setCurrentItem(300);//不可以为0,否则不能无缝轮转
viewpager.setOnPageChangeListener(this);
handler.postDelayed(run, 3000);


adapter(其中getCount要设置为Integer.MAX_VALUE):

private class MyAdapter extends PagerAdapter{

@Override
public int getCount() {	//有多少页
return Integer.MAX_VALUE;//2的31次方-1
}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}

@Override
public Object instantiateItem(View container, int position) {	//添加图片
int index=position%views.size();
((ViewPager)container).addView(views.get(index));

return views.get(index);
}

@Override
public void destroyItem(View container, int position, Object object) {//销毁图片
((ViewPager)container).removeView(views.get(position%views.size()));
}

}


设置循环:

private Handler handler=new Handler();

private Runnable run=new Runnable(){
@Override
public void run() {
//主线程
if(System.currentTimeMillis()-lastTime>3000){
currentIndex++;
viewpager.setCurrentItem(currentIndex);
lastTime=System.currentTimeMillis();
}
handler.postDelayed(run, 3000);
}

};

其中int index=position%views.size() ,用图片来说明



本地获取图片和服务器上获取图片显示,广告无缝轮状有些不同:

初始定义的: viewpager.setCurrentItem(currentIndex); 和currentIndex 需对应

还有adapter里面的instantiateItem:

//添加
@Override
public Object instantiateItem(View container, int position) {
ImageView iv;
try {
xxxpostingPost=top.get(position%top.size());
iv = new ImageView(getBaseContext());
iv.setScaleType(ImageView.ScaleType.CENTER_CROP);
iv.setTag(postingPost.getxxx_reply_id());
iv.setOnClickListener(new AadvertisementClick());
String img=HttpUtil.xxxx+(String) new JSONArray(xxxx.getxxx_img()).get(0);
imageLoader.displayImage(img, iv, options);
((ViewPager) container).addView(iv);
return iv;
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: