Fragment下使用ViewPager大图轮播中的循环滚动问题

gooqii 2015-04-30 10:08:33

问题描述:首先让在Fragment中的Viewpager获取网络图片,循环滚动起来,重点是想让滚动到最后一张的时候,循环到第一张的方式也是向右滑动,而不是迅速往左返回到第一页。(当调整循环速度变慢后,可以很容易发现最后一张图片这个滚动方式)看起来很不舒服的。

小白我网上找了半天都不能解决问题。

这里的Adapter贴出来,请问一下大神应该怎么改才能循环的时候连接起来。。。

private List<View> views = null;

public AdAdapter(List<View> views) {
this.views = views;
}

@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView(views.get(arg1));
}

@Override
public void finishUpdate(View arg0) {

}

@Override
public int getCount() {
return views.size();
}

@Override
public Object instantiateItem(View v, int i) {
if (((ViewPager) v).getChildCount() == views.size()) {
((ViewPager) v).removeView(views.get(i % views.size()));
}
((ViewPager) v).addView(views.get(i % views.size()), 0);
return views.get(i % views.size());
}


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

@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {

}

@Override
public Parcelable saveState() {
return null;
}

@Override
public void startUpdate(View arg0) {

}



...全文
1329 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tqwboy 2016-03-03
  • 打赏
  • 举报
回复
不知道LZ解决了没有,这个是我写的,符合你的需求,代码也很简单,你可以直接使用和用来学习 http://download.csdn.net/detail/tqwboy/9452040
happybox 2016-02-06
  • 打赏
  • 举报
回复
activit_main.xml <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:clipChildren="true"> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="fill_parent" android:layout_height="wrap_content" android:clipChildren="true"/> <!--android:layout_marginLeft="80dp"--> <!--android:layout_marginRight="80dp"/>--> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:background="@android:color/transparent"> <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" android:background="@drawable/menu_bg" android:visibility="invisible"> <ImageView android:id="@+id/tab_music" android:layout_width="0dp" android:layout_height="82dp" android:background="@drawable/menu_focus" android:layout_weight="1" android:paddingTop="16px" android:paddingBottom="15px" android:src="@drawable/item01" /> <ImageView android:id="@+id/tab_call" android:layout_width="0dp" android:layout_height="82dp" android:layout_weight="1" android:paddingTop="16px" android:paddingBottom="15px" android:src="@drawable/item02" /> <ImageView android:id="@+id/tab_navigation" android:layout_width="0dp" android:layout_height="82dp" android:layout_weight="1" android:paddingTop="16px" android:paddingBottom="15px" android:src="@drawable/item03" /> </LinearLayout> </RelativeLayout> </FrameLayout> <!-- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:clipChildren="true" > <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="fill_parent" android:layout_height="wrap_content" android:clipChildren="true"/> <!– android:layout_marginLeft="200dp" android:layout_marginRight="200dp" />–> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <LinearLayout android:id="@+id/viewGroup" android:layout_width="fill_parent" android:layout_height="82dp" android:layout_alignParentBottom="true" android:layout_marginBottom="3dp" android:gravity="center_horizontal" android:orientation="horizontal" android:fitsSystemWindows="true" > </LinearLayout> </RelativeLayout> </FrameLayout> --> item01.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ImageView android:id="@+id/imageView1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="centerCrop" android:src="@drawable/item01" /> </LinearLayout>
happybox 2016-02-06
  • 打赏
  • 举报
回复
试一下这个, import android.app.Activity; import android.graphics.drawable.RippleDrawable; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.ImageView; public class oneActivity extends Activity implements OnPageChangeListener{ public static final String TAG="TwoActivity"; /** * ViewPager */ private ViewPager viewPager; /** * 装点点的ImageView数组 */ private ImageView[] tips; /** * 装ImageView数组 */ private ImageView[] mImageViews; /** * 图片资源id */ private int[] imgIdArray ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewGroup group = (ViewGroup)findViewById(R.id.viewGroup); group.setOnTouchListener(new View.OnTouchListener(){ /** * Called when a touch event is dispatched to a view. This allows listeners to * get a chance to respond before the target view. * * @param v The view the touch event has been dispatched to. * @param event The MotionEvent object containing full information about * the event. * @return True if the listener has consumed the event, false otherwise. */ @Override public boolean onTouch(View v, MotionEvent event) { return viewPager.dispatchTouchEvent(event); } }); viewPager = (ViewPager) findViewById(R.id.viewPager); // viewPager.setOffscreenPageLimit(3); // viewPager.setPageMargin(10); //载入图片资源ID imgIdArray = new int[]{R.drawable.item01, R.drawable.item02, R.drawable.item03}; //将点点加入到ViewGroup中 tips = new ImageView[]{(ImageView)findViewById(R.id.tab_music),(ImageView)findViewById(R.id.tab_call),(ImageView)findViewById(R.id.tab_navigation)}; //将图片装载到数组中 mImageViews = new ImageView[imgIdArray.length]; for(int i=0; i<mImageViews.length; i++){ ImageView imageView = new ImageView(this); mImageViews[i] = imageView; imageView.setBackgroundResource(imgIdArray[i]); } //设置Adapter viewPager.setAdapter(new MyAdapter()); //设置监听,主要是设置点点的背景 viewPager.setOnPageChangeListener(this); //设置ViewPager的默认项, 设置为长度的100倍,这样子开始就能往左滑动,当只有3张图片或者2张图片的时候,remove *100 viewPager.setCurrentItem((mImageViews.length)*100); } /** * * @author xiaanming * */ public class MyAdapter extends PagerAdapter{ @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } //当只有3张图片或者2张图片的时候,destroyItem方法中不removeView @Override public void destroyItem(View container, int position, Object object) { Log.e(TAG, "destroyItem: " + position); // ((ViewPager)container).removeView(mImageViews[position % mImageViews.length]); } /** * 载入图片进去,用当前的position 除以 图片数组长度取余数是关键 */ @Override public Object instantiateItem(View container, int position) { try { ((ViewPager)container).addView(mImageViews[position % mImageViews.length], 0); } catch (Exception e) { e.printStackTrace(); } Log.e(TAG, "instantiateItem: "+(position%mImageViews.length)); return mImageViews[position % mImageViews.length]; } } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected(int arg0) { setImageBackground(arg0 % mImageViews.length); } /** * 设置选中的tip的背景 * @param selectItems */ private void setImageBackground(int selectItems){ for(int i=0; i<tips.length; i++){ if(i == selectItems){ tips[i].setBackgroundResource(R.drawable.menu_focus); }else{ tips[i].setBackgroundResource(0); } } } }
UESTC少尉 2015-12-04
  • 打赏
  • 举报
回复
没做过,只做过迅速往左返回到第一页
  • 打赏
  • 举报
回复
修改一下继承的pageradapter试试
  • 打赏
  • 举报
回复
github上面搜索 AutoViewPager
笑笑风 2015-12-02
  • 打赏
  • 举报
回复
@Override public int getCount() { return Integer.MAX_VALUE; }
空格啊 2015-12-02
  • 打赏
  • 举报
回复
顶一下SHSIHI
gooqii 2015-07-16
  • 打赏
  • 举报
回复
顶顶顶 快来大牛~~
gooqii 2015-06-06
  • 打赏
  • 举报
回复
求助啊,大神们快来帮帮小白吧

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧