用最简单最实用的方式实现ViewPager无限循环两种方式
来源:互联网 发布:淘宝上怎么买客户资料 编辑:程序博客网 时间:2024/05/16 04:41
先上效果:
第一种:
实现原理 :
有三张图片,实现无限循环。在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 };@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.viewpager);viewPager = (ViewPager) findViewById(R.id.viewpager);listviews = new ArrayList<ImageView>();// 添加viewpager多出的两个viewint 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);}@Overridepublic void onPageScrollStateChanged(int arg0) {}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic 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 {@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {ImageView view = listviews.get(position);container.removeView(view);view.setImageBitmap(null);}@Overridepublic 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);}@Overridepublic int getCount() {return listviews.size();}@Overridepublic 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 };@Overrideprotected 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 {@Overridepublic 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());}@Overridepublic int getCount() {return Integer.MAX_VALUE;}@Overridepublic boolean isViewFromObject(View view, Object o) {return view == o;}}}
转载请注明出处:http://blog.csdn.net/just_sanpark/article/details/17436037
2 7
- 用最简单最实用的方式实现ViewPager无限循环两种方式
- 用最简单最实用的方式实现ViewPager无限循环两种方式
- 用最简单最实用的方式实现ViewPager无限循环两种方式
- Android 简单最实用的方式实现ViewPager无限循环两种方式
- ViewPager 无限循环的两种实现方式
- 实现ViewPager无限循环的方式一
- 实现ViewPager无限循环的方式二
- 用最简单的方法实现ViewPager无限循环滑动(跑马灯)效果
- viewpager实现无限轮播的两种方式总结
- viewpager两种方式实用显示方式
- android最简单的ViewPager无限翻页
- 【简单向】用最简单易懂的方式实现FFT
- 最简单的方式实现文件下载
- 最简单的截屏实现方式
- Android最简单的方式实现MVP
- 几种排序算法的最简单实现方式
- 几种排序算法的最简单实现方式
- for循环的两种实现方式
- 限制鼠标活动
- 浙江新2014挂历制作,供应温州挂历印刷公司
- 如何通过dom4j构造出xml格式文件
- Python Errors and Exceptions
- 怎样书写项目方案
- 用最简单最实用的方式实现ViewPager无限循环两种方式
- int与Integer的区别
- sql语句中获取datetime的日期部分或时间部分
- JSP九大内置对象
- Java EE应用分层
- BB10方便查看qDebug()信息的方法
- ArcInfo实现数据同步复制【三】双向同步复制
- android 4.2 MMS listVIew平滑滚动到列表最后一项的效果
- User Profile service is stuck on stopping /Starting.