參考网址:http://my.oschina.net/xsk/blog/119167

总体的架构:ViewPgaer 中直接嵌套  IamgeView

方案一:  重写Viewpager 这样有局限性。 这里的案例是 本地静态的图像

原本的实现原理: 这里是一种模拟方式 实现的 “无线的循环”。 事实上并非 真正意义上的无线循环。 而是 设置的值非常大,用于 当做 无线循环。

设置默认选中的非常大的值:

viewPager.setCurrentItem(100000 * imageResId.length);

在 PagerAdapter  初始化的方法中: 仅仅须要  创建一个 ImageView  就可以!

代码:

package stu.hades;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout; import com.example.hadesviewpagerdemo.R; public class MyViewPager extends ViewPager { protected Context mContext = null;
protected ViewPager viewPager = null; //1、定义图片资源数组。有几个就写几个。也能够动态填充
public static int[] imageResId = new int[] {R.drawable.aaa,R.drawable.aab, R.drawable.aac,R.drawable.aad}; //2、初始化一些參数
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = context;
viewPager = this;
} //3、视图初始化后配置适配器和监听
@Override
protected void onFinishInflate() {
super.onFinishInflate();
viewPager.setAdapter(new MyAdapter(mContext));
//设定启发位置,设这么大。以便能够左循环100000次,应该没有人滑动这么频繁吧!
viewPager.setCurrentItem(100000 * imageResId.length);
viewPager.setOnPageChangeListener(new MyPageChangeListener());
} //3、图片更改监听器
private class MyPageChangeListener implements OnPageChangeListener { protected int oldPosition = 0; //以下里是显示当前图片位置的圈圈,这里是个參考,大家能够自己写,即便凝视不影响滑动
public void onPageSelected(int position) {
// LinearLayout image_viewpager_circle = (LinearLayout) ((RelativeLayout) viewPager.getParent()).findViewById(R.id.main_image_viewpager_circle);
// ((ImageView) image_viewpager_circle.getChildAt(oldPosition)).setImageResource(R.drawable.dot_normal);
// ((ImageView) image_viewpager_circle.getChildAt(position% imageResId.length)).setImageResource(R.drawable.dot_focused);
oldPosition = position % imageResId.length;
} public void onPageScrollStateChanged(int arg0) { } public void onPageScrolled(int arg0, float arg1, int arg2) { }
} @Override
protected void onMeasure(int arg0, int arg1) {
super.onMeasure(arg0, arg1);
} }

2  adapter

package stu.hades;

import android.content.Context;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView; public class MyAdapter extends PagerAdapter { public Context mContext; public MyAdapter(Context mContext) {
this.mContext = mContext;
} // 给适配设定元素数最大值,能够无限右滑动,左滑动不能超过100000次
@Override
public int getCount() {
return Integer.MAX_VALUE;
} @Override
public int getItemPosition(Object object) {
// TODO Auto-generated method stub
return super.getItemPosition(object);
} // 这个大家都懂的,使用方法能够百度或者OSCHINA一下,我白话文:每次初始化当前视图和左右两側的视图
@Override
public Object instantiateItem(View arg0, int position) {
// TODO Auto-generated method stub
int posi = position % MyViewPager.imageResId.length; // 每次加入新视图,尽管有点耗资源。但不会有冲突,而且在视图切换过程中。会销毁没用的视图。 ImageView xImageView = new ImageView(mContext);
xImageView.setBackgroundResource(MyViewPager.imageResId[posi]);
android.view.ViewGroup.LayoutParams para = new android.view.ViewGroup.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
xImageView.setAdjustViewBounds(true);
xImageView.setLayoutParams(para);
((ViewPager) arg0).addView(xImageView, 0);
return xImageView;
} @Override
public void destroyItem(View arg0, int position, Object arg2) {
// 销毁不须要的视图
((ViewPager) arg0).removeView((View) arg2);
} @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) { } @Override
public void finishUpdate(View arg0) { }
}

代码网址:http://pan.baidu.com/s/1pJMDVMb

參考方案 二:  不重写 VIewpager

直接使用Viewpager, 可是 一样须要设置 VIewpager.setCurrentItem();

注意:  非常重要的一点 VIewpager 中  ImageView 的重用问题。 不要每一都创建非常麻烦。

VIewPgaer重用: 自己再往搜一下, 原理非常easy。就是讲ImageView放到 集合中。 通通过 add(ImageView)   remove() 实现 ImageView 的重用!

Android 怎样实现 焦点图的 无线循环滑动的状态?的更多相关文章

  1. 使用 iscroll 实现焦点图无限循环

    现在大家应该都看到过焦点图轮播的效果,这个效果是什么样我就不截图了.昨天做练习,练习要求是使用iscroll实现焦点图的无限循环滚动,并且当手指触摸焦点图后,停止焦点图的循环滚动.第一次接触iscro ...

  2. 8款超绚丽的jQuery焦点图动画

    随着前端技术和浏览器技术的不断发展,人们开始对网页视觉效果的要求越来越高.我们经常会在页面中看到很多炫酷的图片焦点图播放控件,有些甚至是大屏的焦点图占用大片的页面空间,从而吸引用户的眼球.本文要分享的 ...

  3. 关于UIScrollView无限循环滑动

    在使用某宝或某东购物的时候,我们会在其首页看到一个可以滑动的版块,这个版块的实现就是一个UIScrollView.在我们使用UIScrollView的时候会发现,滑动到最后的时候,UIScrollVi ...

  4. JS实现焦点图轮播效果

    大家平时逛淘宝网的时候,在首页就能看到焦点图轮播的效果,就是这个样子的: PS:想起每每打开淘宝,总会被这个玩意先夺眼球,偶尔还去点进去溜溜,幸好我定力好,总能控制住自己的购买欲望,为自己不用剁手感到 ...

  5. JavaScript基础 -- 焦点图轮播(转载)

    首先将HTML结构搭建好: <div id="container"> <div id="list" style="left: -60 ...

  6. 自制jQuery焦点图切换简易插件

    首页经常是需要一个焦点图切换的效果,最近做的项目也正好需要,所以在网上搜索,后面查到了一个半成品的插件,这里我自己修改了一下. js文件夹下面有两个文件夹jquery.jslide.js与jquery ...

  7. 基于jQuery的网站首页宽屏焦点图幻灯片

    今天给大家分享一款基于jQuery的网站首页宽屏焦点图幻灯片.这款焦点图适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 在线预览 ...

  8. 一个酷炫的,基于HTML5,Jquery和Css的全屏焦点图特效,兼容各种浏览器

    基于HTML5和CSS的焦点图特效,梅花图案的背景很有中国特色,而且还会动哦,效果超炫,推荐下载! 演示图 html代码 <!DOCTYPE html PUBLIC "-//W3C// ...

  9. javascript焦点图自动播放

    这次是完整版,网页点开就能自动播放 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

随机推荐

  1. go并发编程 WaitGroup, Mutex

    1.背景 记录一下,方便后续写代码直接使用. 需要注意几点: chan 默认支持多协程工作,不需要加锁. 其他变量操作需要使用锁保护(map多协程并发写会panic, 并且无法捕获). 启动gorou ...

  2. 基于Myeclipse+Axis2的WebService开发实录

    最近开始学习了下在Myeclipse开发工具下基于WebSerivce的开发,下面将相关相关关键信息予以记录 Myeclipse的安装,本文以Myeclipse2014-blue为开发环境,相关配置执 ...

  3. SQLServer XXX IS NOT NULL

    SQLServer中不能使用像Java和C#中的  XXX!=null   这种用法, 使用上面的用法返回值永远是False False False 正确的用法应该是--> XXXis not ...

  4. 2018年排名前20的数据科学Python库

    Python 在解决数据科学任务和挑战方面继续处于领先地位.业已证明最有帮助的Python库,我们选择 20 多个库,因为其中一些库是相互替代的,可以解决相同的问题.因此,我们将它们放在同一个分组. ...

  5. Go中的main函数和init函数

    Go里面有两个保留的函数:init函数(能够应用于所有的package)和main函数(只能应用于package main).这两个函数在定义时不能有任何的参数和返回值.虽然一个package里面可以 ...

  6. 用SQL Server验证用户名和密码

    用SQL Server验证用户名和密码,从页面输入的用户名和密码与数据库的用户名和密码进行匹配,正确则登入,错误则提醒. <form action="index.jsp" m ...

  7. JavaScript的基本语法(一)

    一.常用的表单元素有: 文本框(text). 密码框(password). 多行文本框(<textarea>) 单选按钮(radio). 复选框(checkbox). 列表框(<se ...

  8. 安卓代码迁移:ActionBarActivity: cannot be resolved to a type

    参考链接:http://stackoverflow.com/questions/18830736/actionbaractivity-cannot-be-resolved-to-a-type in e ...

  9. DNN结构演进History—CNN-GoogLeNet :Going Deeper with Convolutions

    抄袭了一片文章,进行少量修改:http://www.gageet.com/2014/09203.php       作者:Christian Szegedy( google )  刘伟(北卡罗来纳  ...

  10. Asp.Net Core 中利用QuartzHostedService 实现 Quartz 注入依赖 (DI)

    QuartzHostedService  是一个用来在Asp.Net Core 中实现 Quartz 的任务注入依赖的nuget 包: 基本示例如下: using System; using Syst ...