oldPosition = currentIndex-1 ;
Log.e(“wenzhihao”,“position==”+position+“,currentIndex=”+currentIndex);
}
@Override
public void onPageScrollStateChanged(int state) {
if(stateViewPager.SCROLL_STATE_IDLE){
viewPager.setCurrentItem(currentIndex,false);
play();
}else if(stateViewPager.SCROLL_STATE_DRAGGING){
cancel();
}
}
});
setIndicatorDot();
mLinearLayout.getChildAt(0).setEnabled(true);
}
/**
- 播放,根据autoplay
/
public void play(){
if (autoPlay){
handler.postDelayed(runnable,time);
}else {
handler.removeCallbacks(runnable);
}
}
/* - 取消播放
*/
public void cancel(){
handler.removeCallbacks(runnable);
}
/**
- 设置小圆点
*/
private void setIndicatorDot() {
for (int i = 0;i<mAdapter.getCount()-2;i++){
//添加底部灰点
View v = new View(mContext);
v.setBackgroundResource(R.drawable.bg_dot);
v.setEnabled(false);
//指定其大小
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(20,20);
if (i != 0)
params.leftMargin = 20;
params.bottomMargin = 20;
v.setLayoutParams(params);
mLinearLayout.addView(v);
}
}
/**
- 设置适配器
- @param adpter
*/
public void setAdapter(T adpter){
mAdapter = adpter ;
viewPager.setAdapter(mAdapter);
initViewPager();
}
/**
- 设置是否自动播放
- @param autoPlay
*/
public void setAutoPlay(boolean autoPlay) {
AutoScrollViewPager.autoPlay = autoPlay;
if (!autoPlay){
handler.removeCallbacks(runnable);
}
}
}
注意主要几点
- 组合控件,一个FrameLayout布局包含ViewPager和一个小圆点指示器。
- 自动循环用handler实现,循环发送消息。
- 这里需要注意的是setAdapter( )方法,只要正常写PageAdapter传入即可;
- 在OnPageChangeListener中,onPageSelected的时候去处理位置问题,就是图中所说的,从左往右滑动,position