无限轮播
2016-05-03 21:30
176 查看
2、设置圆点类型 :rectangle 矩形,cornersradius,半径,#88000000 给半径范围内的颜色,
显示的就是圆
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<corners android:radius="8dp"/>
<solid android:color="#88000000"/>
添加图片的集合:dotsList = new ArrayList<ImageView>();
一般先清空集合和存放圆点布局中的布局:dotsList.clear();,LinearLayout.removeAllViews();
for (int i = 0; i < imageUrls.length; i++) { //imageUrls, 存放圆点对应图片的数组
// 画出圆点
ImageView imageView = new ImageView(this);
//
if (i == 0) {
imageView.setImageResource(R.drawable.dots_focus);
} else {
imageView.setImageResource(R.drawable.dots_normal); }
// 宽和高 dp相对像素
// 如果是真正开发,需要转成 px值 屏幕适配dp---px
LayoutParams params = new LayoutParams(20, 20);
// 放到什么位置
params.setMargins(5, 0, 5, 0);
dotsList.add(imageView);
ll_dots.addView(imageView, params);
3、for (int i = 0; i < dotsList.size(); i++) {
if (i == position ) { //如果是当前条目,设置圆点选中
dotsList.get(i).setImageResource(R.drawable.dots_focus);
} else {
dotsList.get(i).setImageResource(R.drawable.dots_normal);
}
为了实现无限轮播效果:
for (int i = 0; i < dotsList.size(); i++) {
if (i == position % imageUrls.length) {
dotsList.get(i).setImageResource(R.drawable.dots_focus);
} else {
dotsList.get(i)
.setImageResource(R.drawable.dots_normal);
}
4、无限轮播, viewpager适配器count设置为:Integer.MAX_VALUE ;因为数组有最长长度,所以为了防止角标越界,
在instantiateItem中添加布局的时候, 数组长度设置为imgs[position%imgs.length]
原本数组长度 :0 1 2 3 4 5 %6
%以后的长度: 0 1 2 3 4 5 如果被%数小于%数。
结果就是被%数
3除以5 3是被除数,5是除数 3/5
3除5 = 5除以3 5是被除数,3是除数
5/3
为使viewpger默认显示第一页,设置适配器以后设置viewPager.setCurrentItem(imageUrls.length
* 5000);
5、自动轮播,
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (msg.what == 0) {
// 获取viewPager当前所在的页码索引值
int currentItem = viewPager.getCurrentItem();
//设置当前页面自增
currentItem++;
viewPager.setCurrentItem(currentItem);
//重新再发送消息,以达到无限循环效果
handler.sendEmptyMessageDelayed(0, 2000);
} };
在设置适配器后,handler.sendEmptyMessageDelayed(0, 2000);设置handler延迟2秒发送一个消息,再执行handler中的操作。
6、viewPager触摸监听
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 手指按下的时候,停止自动轮播的任务
0 // 移除所有的消息及回调 。null代表移除所有
handler.removeCallbacksAndMessages(null);
break;
case MotionEvent.ACTION_UP:
handler.sendEmptyMessageDelayed(0, 2000);
break;
case MotionEvent.ACTION_CANCEL:
handler.sendEmptyMessageDelayed(0, 2000);
break;
}
//返回true代表消费事件
//返回false代表不消费事件,不消费返回给父控件
return true;
}
显示的就是圆
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<corners android:radius="8dp"/>
<solid android:color="#88000000"/>
添加图片的集合:dotsList = new ArrayList<ImageView>();
一般先清空集合和存放圆点布局中的布局:dotsList.clear();,LinearLayout.removeAllViews();
for (int i = 0; i < imageUrls.length; i++) { //imageUrls, 存放圆点对应图片的数组
// 画出圆点
ImageView imageView = new ImageView(this);
//
if (i == 0) {
imageView.setImageResource(R.drawable.dots_focus);
} else {
imageView.setImageResource(R.drawable.dots_normal); }
// 宽和高 dp相对像素
// 如果是真正开发,需要转成 px值 屏幕适配dp---px
LayoutParams params = new LayoutParams(20, 20);
// 放到什么位置
params.setMargins(5, 0, 5, 0);
dotsList.add(imageView);
ll_dots.addView(imageView, params);
3、for (int i = 0; i < dotsList.size(); i++) {
if (i == position ) { //如果是当前条目,设置圆点选中
dotsList.get(i).setImageResource(R.drawable.dots_focus);
} else {
dotsList.get(i).setImageResource(R.drawable.dots_normal);
}
为了实现无限轮播效果:
for (int i = 0; i < dotsList.size(); i++) {
if (i == position % imageUrls.length) {
dotsList.get(i).setImageResource(R.drawable.dots_focus);
} else {
dotsList.get(i)
.setImageResource(R.drawable.dots_normal);
}
4、无限轮播, viewpager适配器count设置为:Integer.MAX_VALUE ;因为数组有最长长度,所以为了防止角标越界,
在instantiateItem中添加布局的时候, 数组长度设置为imgs[position%imgs.length]
原本数组长度 :0 1 2 3 4 5 %6
%以后的长度: 0 1 2 3 4 5 如果被%数小于%数。
结果就是被%数
3除以5 3是被除数,5是除数 3/5
3除5 = 5除以3 5是被除数,3是除数
5/3
为使viewpger默认显示第一页,设置适配器以后设置viewPager.setCurrentItem(imageUrls.length
* 5000);
5、自动轮播,
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (msg.what == 0) {
// 获取viewPager当前所在的页码索引值
int currentItem = viewPager.getCurrentItem();
//设置当前页面自增
currentItem++;
viewPager.setCurrentItem(currentItem);
//重新再发送消息,以达到无限循环效果
handler.sendEmptyMessageDelayed(0, 2000);
} };
在设置适配器后,handler.sendEmptyMessageDelayed(0, 2000);设置handler延迟2秒发送一个消息,再执行handler中的操作。
6、viewPager触摸监听
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 手指按下的时候,停止自动轮播的任务
0 // 移除所有的消息及回调 。null代表移除所有
handler.removeCallbacksAndMessages(null);
break;
case MotionEvent.ACTION_UP:
handler.sendEmptyMessageDelayed(0, 2000);
break;
case MotionEvent.ACTION_CANCEL:
handler.sendEmptyMessageDelayed(0, 2000);
break;
}
//返回true代表消费事件
//返回false代表不消费事件,不消费返回给父控件
return true;
}
相关文章推荐
- 【Hibernate】从入门到精通(五)关联映射之一对一映射
- Hibernate常见异常
- 深入浅出java 函数参数传递原理
- poj 1046 Color Me Less -- 模拟
- 向本地的apache服务器上传文件
- Hadoop实战【一、HDFS】
- php htmlentities和htmlspecialchars 的区别
- vijos1020—切蛋糕
- 四种简略的拓宽51单片机中断的妙招!
- Ubuntu 12.04.1 mysql从5.5升级到5.6
- python 爬虫实战--登陆学校教务系统获取成绩信息
- 《Effective java》读书笔记-(三)
- 基础知识(十三)dlib python人脸检测
- 基于bootstrap的网页开发之图片轮播
- 237. Delete Node in a Linked List
- Nagle算法
- HibernateTemplate HibernateCallback()使用说明
- 打印乘法口诀表
- Responder Chain简析
- ubuntu双系统安装的一些问题