您的位置:首页 > 其它

无限轮播

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: