无限轮播

 

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);

3for (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

  35  =  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中的操作。

 

6viewPager触摸监听

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;

}         


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值