无限轮播

//主Activity中

public class MainActivity extends Activity {

private List<View> list;
private ViewPager view_pager;
LinearLayout pointGroup;
/**
* 上一个指示点的下标
*/
private int lastPointIdex = 0;
Handler handler=new Handler(){

 

 

public void handleMessage(android.os.Message msg) {

int currentItem = view_pager.getCurrentItem();

view_pager.setCurrentItem(currentItem+=1);

handler.sendEmptyMessageDelayed(1,2000);
};



};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

view_pager = (ViewPager) findViewById(R.id.view_pager);

pointGroup = (LinearLayout) findViewById(R.id.ll_point_group);
view_pager.setAdapter(new MyPagerAdapter(setData()));


int item=Integer.MAX_VALUE/2 - Integer.MAX_VALUE/2%list.size();

view_pager.setCurrentItem(item);


handler.sendEmptyMessageDelayed(1,2000);

view_pager.setOnPageChangeListener(new OnPageChangeListener() {

@Override
// viewPager当前展示的页面
public void onPageSelected(final int position) {
int myIndex = position % list.size();
// 改变指示点的状态。
// 将当前指示点的图片enable设为 true
pointGroup.getChildAt(myIndex).setEnabled(true);
// 将上一个指示点的设置enable 设为false;
pointGroup.getChildAt(lastPointIdex).setEnabled(false);

// 更新lastPointIdex的值
lastPointIdex = myIndex;
}

@Override
// viewpager条目页滑动时的偏移量
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {

}

/*
* @see ViewPager#SCROLL_STATE_IDLE
*
* @see ViewPager#SCROLL_STATE_DRAGGING
*
* @see ViewPager#SCROLL_STATE_SETTLING
*/
@Override
// viewPager滑动的状态,停止=0,拖拽=1,固定=2
public void onPageScrollStateChanged(int state) {
// TODO
// System.out.println(state);
}

});

}

/**
* 准备view,让viewpager显示
*
* @return
*/

private List<View> setData() {

list = new ArrayList<View>();

list.add(View.inflate(this, R.layout.item1, null));
list.add(View.inflate(this, R.layout.item2, null));
list.add(View.inflate(this, R.layout.item3, null));
list.add(View.inflate(this, R.layout.item4, null));



for (int i = 0; i < list.size(); i++) {
// 添加指示点
ImageView point = new ImageView(this);
/*
* 子view的LayoutParams参数,要看,当前父view是谁,
* 由于现在point的父view是LinearLayout,所以为point 添加
* LinearLayout.LayoutParams
*/
LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, -2);
params.leftMargin = 15;
point.setLayoutParams(params);

point.setBackgroundResource(R.drawable.point_bg);
pointGroup.addView(point);

// 默认情况下,第一个小点enable为true
if (i == 0) {
point.setEnabled(true);
} else {
point.setEnabled(false);
}

}

return list;
}


}

//适配器里面

 

public class MyPagerAdapter extends PagerAdapter {
// viewPager要展示的View(内容)
List<View> list;

public MyPagerAdapter(List<View> list) {

this.list = list;

}

@Override
// viewPager的条目总数
public int getCount() {
return Integer.MAX_VALUE;
}

@Override
public boolean isViewFromObject(View view, Object object) {

return view == object;
}

@Override
// 实例化viewPager的条目
public Object instantiateItem(ViewGroup container, int position) {

View view = list.get(position%list.size());

container.addView(view);

return view;

}

@Override
// 销毁Viewpager的条目
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO
// 这行代码必须注释,否则报错
// super.destroyItem(container, position, object);

container.removeView((View) object);

}

}

 

//下面的圆点

 //在drawable中point_bg(自定义的)中

 

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_enabled="true" android:drawable="@drawable/point_focused" />
<item android:state_enabled="false" android:drawable="@drawable/point_nomal" />

 

//point_focused

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size android:width="5dp" android:height="5dp" />
<solid android:color="#ff0" />

//point_nomal

 

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size android:width="5dp" android:height="5dp" />
<solid android:color="#f00" />

 

 

posted @ 2016-01-23 14:58  整个世界你的心  阅读(163)  评论(0)    收藏  举报