Viewpager最后到最前循环滑动

来源:互联网 发布:白苹果怎么恢复数据 编辑:程序博客网 时间:2024/06/09 19:37

选取自己项目里面的五张图片,然后无缝隙循环显示(提供思路和主要代码):

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

    


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{@Overridepublic int getCount() {//有多少页return Integer.MAX_VALUE;//2的31次方-1}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0==arg1;}@Overridepublic Object instantiateItem(View container, int position) {//添加图片int index=position%views.size();((ViewPager)container).addView(views.get(index));return views.get(index);}@Overridepublic 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(){@Overridepublic 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;
}





0 0
原创粉丝点击