Android 怎样实现 焦点图的 无线循环滑动的状态?
參考网址: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 怎样实现 焦点图的 无线循环滑动的状态?的更多相关文章
- 使用 iscroll 实现焦点图无限循环
现在大家应该都看到过焦点图轮播的效果,这个效果是什么样我就不截图了.昨天做练习,练习要求是使用iscroll实现焦点图的无限循环滚动,并且当手指触摸焦点图后,停止焦点图的循环滚动.第一次接触iscro ...
- 8款超绚丽的jQuery焦点图动画
随着前端技术和浏览器技术的不断发展,人们开始对网页视觉效果的要求越来越高.我们经常会在页面中看到很多炫酷的图片焦点图播放控件,有些甚至是大屏的焦点图占用大片的页面空间,从而吸引用户的眼球.本文要分享的 ...
- 关于UIScrollView无限循环滑动
在使用某宝或某东购物的时候,我们会在其首页看到一个可以滑动的版块,这个版块的实现就是一个UIScrollView.在我们使用UIScrollView的时候会发现,滑动到最后的时候,UIScrollVi ...
- JS实现焦点图轮播效果
大家平时逛淘宝网的时候,在首页就能看到焦点图轮播的效果,就是这个样子的: PS:想起每每打开淘宝,总会被这个玩意先夺眼球,偶尔还去点进去溜溜,幸好我定力好,总能控制住自己的购买欲望,为自己不用剁手感到 ...
- JavaScript基础 -- 焦点图轮播(转载)
首先将HTML结构搭建好: <div id="container"> <div id="list" style="left: -60 ...
- 自制jQuery焦点图切换简易插件
首页经常是需要一个焦点图切换的效果,最近做的项目也正好需要,所以在网上搜索,后面查到了一个半成品的插件,这里我自己修改了一下. js文件夹下面有两个文件夹jquery.jslide.js与jquery ...
- 基于jQuery的网站首页宽屏焦点图幻灯片
今天给大家分享一款基于jQuery的网站首页宽屏焦点图幻灯片.这款焦点图适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 在线预览 ...
- 一个酷炫的,基于HTML5,Jquery和Css的全屏焦点图特效,兼容各种浏览器
基于HTML5和CSS的焦点图特效,梅花图案的背景很有中国特色,而且还会动哦,效果超炫,推荐下载! 演示图 html代码 <!DOCTYPE html PUBLIC "-//W3C// ...
- javascript焦点图自动播放
这次是完整版,网页点开就能自动播放 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...
随机推荐
- Java中数组要点总结
1.数组是基本数据类型和字符串类型的容器(引用数据类型),而集合是类数据类型的容器: 2.数组定义的格式: (1)一般格式: 元素类型[] 数组名 = new 元素类型[元素个数或者数组长度]: 其中 ...
- asp.net 正则表达式 得到图片url 得到汉字
//取图片 MatchCollection matchs = Regex.Matches(AskText,@"<img\s[^> ]*src=( ...
- 简单的UIButton按钮动画效果iOS源码
这个是简单的UIButton按钮动画效果案例,源码,简单的UIButton按钮动画,可以自定义button属性. 效果图: <ignore_js_op> 使用方法: 使用时把ButtonA ...
- 据说现在很缺设计师,阿里云的LOGO是用键盘打出来的……
今天,阿里云发布了自己的新LOGO,官方的解读是:“[]”这个呢其实是代码中常用的一个符号,代表着计算:中间的“—”则代表流动的数据.在官网等平台上,阿里云新LOGO是动态的,中间的“—”会匀速移动, ...
- python处理中文编码
python2 读取excle中的数据时,对于汉字的读取报错: 代码:data[num][4]={"content": "测试"} data=data[num] ...
- JSP状态管理_1_Cookie
http协议的无状态性:当浏览器发送请求飞服务器时,服务器相应客户端请求:但当同一个浏览器再次发送请求给浏览器时,服务器并不知道它就是刚才那个客户端. 保存用户状态的两大机制:Session,Cook ...
- openstack--memecache
一.缓存系统 静态web页面: 1.工作流程: 在静态Web程序中,客户端使用Web浏览器(IE.FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Reques ...
- 【转载】使用JSONObject生成和解析json
1. json数据类型 类型 描述 Number 数字型 String 字符串型 Boolean 布尔型 Array 数组 Object 对象 null 空值 (1)json中不区分整数.小数等类型, ...
- Python笔记1----数据类型
Python数据类型: 整型.字符串.浮点型.布尔型 列表.元祖.字典 1.整型: 范围: 32位机子:-231~231-1. 64位机子:-263~263-1 2.浮点型: ...
- Java语言输出HelloWorld
1.新建一个名为HelloWorld.txt的文本文件. 2.将HelloWorld.txt改为.java. 3.将HelloWorld.java用文本文件的方式打开,并输入代码. 4.打开命令行,进 ...