无限轮播
//主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" />
浙公网安备 33010602011771号