用最简单最实用的方式实现ViewPager无限循环两种方式
来源:互联网 发布:淘宝上能买到av碟片吗 编辑:程序博客网 时间:2024/04/29 13:35
转载: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;
- }
- }
- <strong>}</strong>
实现原理:在适配器中将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;
- }
- }
- }
0 0
- 用最简单最实用的方式实现ViewPager无限循环两种方式
- 用最简单最实用的方式实现ViewPager无限循环两种方式
- 用最简单最实用的方式实现ViewPager无限循环两种方式
- Android 简单最实用的方式实现ViewPager无限循环两种方式
- ViewPager 无限循环的两种实现方式
- 实现ViewPager无限循环的方式一
- 实现ViewPager无限循环的方式二
- 用最简单的方法实现ViewPager无限循环滑动(跑马灯)效果
- viewpager实现无限轮播的两种方式总结
- viewpager两种方式实用显示方式
- android最简单的ViewPager无限翻页
- 【简单向】用最简单易懂的方式实现FFT
- 最简单的方式实现文件下载
- 最简单的截屏实现方式
- Android最简单的方式实现MVP
- 几种排序算法的最简单实现方式
- 几种排序算法的最简单实现方式
- for循环的两种实现方式
- 容器“身份证书”只能包含一个证书及其密钥
- 第十五周oj平台:指针当形参
- error: cannot open Packages database in /var/lib/rpm
- static的作用(修饰函数、局部变量、全局变量)
- Mac下boost的安装与使用 Install and use boost library on Mac
- 用最简单最实用的方式实现ViewPager无限循环两种方式
- jvm开发笔记2---java反汇编器
- 【BZOJ2618】【Cqoi2006】凸多边形 半平面交 、算法的深度细节剖析。
- 鸟哥私房菜实践(8)- SAMBA
- poj 3518 Prime Gap 二分查找下界和素数筛法
- 一点MATLAB程序加速技巧
- hadoop安装笔记
- C#的基础知识
- 邓亚萍大手笔一掷20亿研发即刻搜索2年就倒闭带来的思考