用最简单最实用的方式实现ViewPager无限循环两种方式
2013-12-20 10:12
841 查看
先上效果:
第一种:
实现原理 :
有三张图片,实现无限循环。在viewpager中设置5个view,第一个为三张图片的最后一张,第五张为三张图片的第一张。图片顺序如下数字:
2-0-1-2-0
0-1-2为正常的三个图片。2,0 为添加的两个图片view
滑动的顺序:进入页面显示0图片,向右滑动到0时,将0页设置为0,则可以继续向右滑动。同理当向左滑动到 2 时,将2页设置为2。
下面贴代码:
ViewpagerDemo.java
package com.example.demo;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
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.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
public class ViewpagerDemo extends Activity implements OnPageChangeListener {
private ViewPager viewPager;
private List<ImageView> listviews;
private int[] pics = { R.drawable.xu1, R.drawable.xu2, R.drawable.xu3 };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager);
viewPager = (ViewPager) findViewById(R.id.viewpager);
listviews = new ArrayList<ImageView>();
// 添加viewpager多出的两个view
int length = pics.length + 2;
for (int i = 0; i < length; i++) {
ImageView imageView = new ImageView(ViewpagerDemo.this);
ViewGroup.LayoutParams viewPagerImageViewParams = new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT);
imageView.setLayoutParams(viewPagerImageViewParams);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
listviews.add(imageView);
}
viewPager.setAdapter(new ViewPagerAdapter());
viewPager.setOnPageChangeListener(ViewpagerDemo.this);
// 设置viewpager在第二个视图显示
viewPager.setCurrentItem(1);
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int i) {
int pageIndex = i;
if (i == 0) {
// 当视图在第一个时,将页面号设置为图片的最后一张。
pageIndex = pics.length;
} else if (i == pics.length + 1) {
// 当视图在最后一个是,将页面号设置为图片的第一张。
pageIndex = 1;
}
if (i != pageIndex) {
viewPager.setCurrentItem(pageIndex, false);
return;
}
}
class ViewPagerAdapter extends PagerAdapter {
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
ImageView view = listviews.get(position);
container.removeView(view);
view.setImageBitmap(null);
}
@Override
public Object instantiateItem(ViewGroup container, int i) {
if (i == 0) {
listviews.get(i).setImageResource(pics[2]);
} else if (i == (listviews.size() - 1)) {
listviews.get(i).setImageResource(pics[0]);
} else {
listviews.get(i).setImageResource(pics[i - 1]);
}
container.addView(listviews.get(i));
return listviews.get(i);
}
@Override
public int getCount() {
return listviews.size();
}
@Override
public boolean isViewFromObject(View view, Object o) {
return view == o;
}
}
}第二种:
实现原理:在适配器中将getcount的值设置为无限大。然后将3份图片加载其中。
转载请注明出处:http://blog.csdn.net/just_sanpark/article/details/17436037
第一种:
实现原理 :
有三张图片,实现无限循环。在viewpager中设置5个view,第一个为三张图片的最后一张,第五张为三张图片的第一张。图片顺序如下数字:
2-0-1-2-0
0-1-2为正常的三个图片。2,0 为添加的两个图片view
滑动的顺序:进入页面显示0图片,向右滑动到0时,将0页设置为0,则可以继续向右滑动。同理当向左滑动到 2 时,将2页设置为2。
下面贴代码:
ViewpagerDemo.java
package com.example.demo;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
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.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
public class ViewpagerDemo extends Activity implements OnPageChangeListener {
private ViewPager viewPager;
private List<ImageView> listviews;
private int[] pics = { R.drawable.xu1, R.drawable.xu2, R.drawable.xu3 };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager);
viewPager = (ViewPager) findViewById(R.id.viewpager);
listviews = new ArrayList<ImageView>();
// 添加viewpager多出的两个view
int length = pics.length + 2;
for (int i = 0; i < length; i++) {
ImageView imageView = new ImageView(ViewpagerDemo.this);
ViewGroup.LayoutParams viewPagerImageViewParams = new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT);
imageView.setLayoutParams(viewPagerImageViewParams);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
listviews.add(imageView);
}
viewPager.setAdapter(new ViewPagerAdapter());
viewPager.setOnPageChangeListener(ViewpagerDemo.this);
// 设置viewpager在第二个视图显示
viewPager.setCurrentItem(1);
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int i) {
int pageIndex = i;
if (i == 0) {
// 当视图在第一个时,将页面号设置为图片的最后一张。
pageIndex = pics.length;
} else if (i == pics.length + 1) {
// 当视图在最后一个是,将页面号设置为图片的第一张。
pageIndex = 1;
}
if (i != pageIndex) {
viewPager.setCurrentItem(pageIndex, false);
return;
}
}
class ViewPagerAdapter extends PagerAdapter {
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
ImageView view = listviews.get(position);
container.removeView(view);
view.setImageBitmap(null);
}
@Override
public Object instantiateItem(ViewGroup container, int i) {
if (i == 0) {
listviews.get(i).setImageResource(pics[2]);
} else if (i == (listviews.size() - 1)) {
listviews.get(i).setImageResource(pics[0]);
} else {
listviews.get(i).setImageResource(pics[i - 1]);
}
container.addView(listviews.get(i));
return listviews.get(i);
}
@Override
public int getCount() {
return listviews.size();
}
@Override
public boolean isViewFromObject(View view, Object o) {
return view == o;
}
}
}第二种:
实现原理:在适配器中将getcount的值设置为无限大。然后将3份图片加载其中。
package com.example.demo; import java.util.ArrayList; import java.util.List; import android.app.Activity; 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.View; import android.view.ViewGroup; import android.widget.ImageView; public class ViewpagerDemo2 extends Activity { private ViewPager viewPager; private List<ImageView> listviews; private int[] pics = { R.drawable.xu1, R.drawable.xu2, R.drawable.xu3 }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.viewpager); viewPager = (ViewPager) findViewById(R.id.viewpager); listviews = new ArrayList<ImageView>(); for (int i = 0; i < pics.length; i++) { ImageView imageView = new ImageView(ViewpagerDemo2.this); ViewGroup.LayoutParams viewPagerImageViewParams = new ViewGroup.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT); imageView.setLayoutParams(viewPagerImageViewParams); imageView.setScaleType(ImageView.ScaleType.FIT_XY); imageView.setImageResource(pics[i]); listviews.add(imageView); } viewPager.setAdapter(new ViewPagerAdapter()); viewPager.setCurrentItem(499); } class ViewPagerAdapter extends PagerAdapter { @Override public Object instantiateItem(ViewGroup container, int position) { if (listviews.get(position % listviews.size()).getParent() != null) { ((ViewPager) listviews.get(position % listviews.size()) .getParent()).removeView(listviews.get(position % listviews.size())); } ((ViewPager) container).addView( listviews.get(position % listviews.size()), 0); return listviews.get(position % listviews.size()); } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object o) { return view == o; } } }
转载请注明出处:http://blog.csdn.net/just_sanpark/article/details/17436037
相关文章推荐
- 用最简单最实用的方式实现ViewPager无限循环两种方式
- Android 简单最实用的方式实现ViewPager无限循环两种方式
- 用最简单最实用的方式实现ViewPager无限循环两种方式
- 用最简单的方法实现ViewPager无限循环滑动(跑马灯)效果
- Android无限循环与自动播放ViewPager的简单实现(广告栏)
- ViewPager实现无限循环,左右滑动,定时轮播及内存泄漏处理
- 【安卓-自定义布局】安卓App开发思路 一步一个脚印(七)实现ViewPager无限循环与自动播放
- Android Studio导入第三方包(资源)方法,ViewPager+TabLayout的使用,ViewPager单独使用实现无限循环
- ViewPager以及导航小圆点实现无限循环
- android 自定义无限循环播放的viewPager。轮播ViewPager。实现循环播放 广告,主题内容,活动,新闻内容时。
- Android 跑马灯效果实现的两种方式,解决和viewpager的冲突问题
- Android简单实现无限滚动自动滚动的ViewPager
- Android ViewPager 实现无限循环滑动
- 简单实现ImageView宽度填满屏幕,高度自适应的两种方式
- Android ViewPager实现无限循环滑动
- Android使用ViewPager实现无限循环滑动及轮播(附源码)
- ViewPager实现无限循环
- Android ViewPager的无限循环与自动滚动实现
- Android viewpager实现无限循环轮播