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