说你的addView()方法引用了一个空对象,说明你的ImageBarnnerViewGroup是空
预先加载图片吧
感觉你应该是测量那部分代码写错了或者漏写了;代码如下:
@Override //测量,先测量子视图的宽度和高度,然后求出ViewGroup的宽度和高度和 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // TODO Auto-generated method stub super.onMeasure(widthMeasureSpec, heightMeasureSpec); //1.求出子视图的个数 children=getChildCount(); //2.求出子视图的宽和高 if(children==0){ setMeasuredDimension(0, 0); //重新设置宽高 }else{ measureChildren(widthMeasureSpec, heightMeasureSpec); //viewgroup的高度就是第一个子视图的高度,宽度就是所有子视图宽度之和 View view=getChildAt(0); //3.求出ViewGroup的宽和高 view_height=view.getMeasuredHeight(); view_width=view.getMeasuredWidth(); int width=view_width*children;//ViewGroup的总宽度 setMeasuredDimension(width, view_height); } }
改成这样就可以阻止首图往前与尾图往后的拖动事件
第二张图会切换到第三张图肯定是判断那里有问题,index > childCount - 1才会切换到第一张,你仔细看看
实际上这个方法的实现是从一个位置到另一个位置,假设开始点的那个位置为(0,0),你可以理解为scrollBy(0-distance,0-0)。