效果图:

使用方法:
AutoScrollViewPager viewPager = (AutoScrollViewPager) findViewById(R.id.vp_photos)
viewPager.setDataList(mUrlList)
viewPager.updateView(0)
viewPager.setIsAutoScroll(true)
viewPager.setIsShowDot(true)
步骤一:在value的attrs.xml文件里添加自定义样式
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="AutoScrollViewPager">
<attr name="autoscroll" format="boolean" />
<attr name="show_navgation_dot" format="boolean" />
</declare-styleable>
</resources>
步骤二:

步骤三:自定义view
/**
* Created by pengkv on 15/12/5.
*/
public class AutoScrollViewPager extends FrameLayout implements View.OnClickListener {
private Context mContext;
private List<String> mDataList;
private int mBofPosition;
private boolean isShowDot;
private boolean isAutoScroll;
private List<View> mViewList;
private ViewPager mViewPager;
private LinearLayout mDotLayout;
private MyPagerAdapter mPagerAdapter;
private ViewPagerRollHelper mRollHelper;
private ViewPager.LayoutParams mImageParams;
private LinearLayout.LayoutParams mDotParams;
private FrameLayout.LayoutParams mViewPagerParams;
private FrameLayout.LayoutParams mDotLayoutParams;
public AutoScrollViewPager(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public AutoScrollViewPager(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mContext = context;
TypedArray array = mContext.obtainStyledAttributes(attrs, R.styleable.AutoScrollViewPager, defStyleAttr, 0);
isAutoScroll = array.getBoolean(R.styleable.AutoScrollViewPager_autoscroll, true);
isShowDot = array.getBoolean(R.styleable.AutoScrollViewPager_show_navgation_dot, true);
array.recycle();
}
public void setIsAutoScroll(boolean isAutoScroll) {
this.isAutoScroll = isAutoScroll;
}
public void setIsShowDot(boolean isShowDot) {
this.isShowDot = isShowDot;
}
public void setDataList(List<String> mDataList) {
this.mDataList = mDataList;
initView();
}
private void initView() {
mViewList = new ArrayList<>();
mImageParams = new ViewPager.LayoutParams();
mImageParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
mImageParams.height = ViewGroup.LayoutParams.MATCH_PARENT;
int size = mContext.getResources().getDimensionPixelSize(R.dimen.five_dp);
mDotParams = new LinearLayout.LayoutParams(size, size);
mDotParams.setMargins(5, 0, 5, 0);
mViewPagerParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
mPagerAdapter = new MyPagerAdapter(mViewList);
mViewPager = new ViewPager(mContext);
mViewPager.setLayoutParams(mViewPagerParams);
mViewPager.setAdapter(mPagerAdapter);
mViewPager.addOnPageChangeListener(new MyPagerOnScrollChangeListener());
addView(mViewPager);
if (isShowDot) {
int height = mContext.getResources().getDimensionPixelOffset(R.dimen.twenty_dp);
mDotLayoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, height);
mDotLayoutParams.gravity = Gravity.BOTTOM | Gravity.CENTER;
mDotLayout = new LinearLayout(mContext);
mDotLayout.setLayoutParams(mDotLayoutParams);
mDotLayout.setOrientation(LinearLayout.HORIZONTAL);
mDotLayout.setGravity(Gravity.CENTER);
addView(mDotLayout);
}
}
public void updateView(int position) {
if (null != mDotLayout) {
mDotLayout.removeAllViews();
}
if (null != mViewList) {
int length = mDataList.size();
int viewLength = mViewList.size();
for (int i = 0; i < length; i++) {
String imgUrl = mDataList.get(i);
ImageView view;
if (i < viewLength) {
view = (ImageView) mViewList.get(i);
} else {
view = new ImageView(mContext);
view.setLayoutParams(mImageParams);
mViewList.add(view);
}
view.setScaleType(ImageView.ScaleType.CENTER_CROP);
view.setOnClickListener(this);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(mContext)
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.tasksProcessingOrder(QueueProcessingType.LIFO)
.memoryCache(new LruMemoryCache(3 * 1024 * 1024))
.memoryCacheSize(3 * 1024 * 1024)
.build();
ImageLoader.getInstance().init(config);
ImageLoader.getInstance().displayImage(imgUrl, view);
if (isShowDot) {
ImageView dot = new ImageView(mContext);
dot.setImageResource(R.drawable.dot);
dot.setLayoutParams(mDotParams);
if (i == 0)
dot.setSelected(true);
mDotLayout.addView(dot);
}
}
setCurrentItem(position);
mPagerAdapter.notifyDataSetChanged();
mRollHelper = new ViewPagerRollHelper(mViewPager, mPagerAdapter);
mRollHelper.setAutoScroll(isAutoScroll);
mRollHelper.autoScroll();
}
}
public void setCurrentItem(int position) {
mViewPager.setCurrentItem(position);
}
public int getCurrentItem() {
return mViewPager.getCurrentItem();
}
@Override
public void onClick(View v) {
}
private class MyPagerAdapter extends PagerAdapter {
private List<View> viewList;
public MyPagerAdapter(List<View> viewList) {
this.viewList = viewList;
}
@Override
public int getCount() {
return viewList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(viewList.get(position));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = viewList.get(position);
container.addView(view);
return view;
}
}
private class MyPagerOnScrollChangeListener implements ViewPager.OnPageChangeListener {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
mRollHelper.setPagerChangeEvent(position);
if (isShowDot) {
View view = mDotLayout.getChildAt(position);
View befView = mDotLayout.getChildAt(mBofPosition);
view.setSelected(true);
befView.setSelected(false);
mBofPosition = position;
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
}
}
步骤四:添加辅助类
/**
* Created by pengkv on 15/12/5.
*/
public class ViewPagerRollHelper {
private ViewPager mViewPager = null;
private PagerAdapter mPagerAdapter = null;
private int newPosition, oldPosition, maxPosition;
private boolean isAutoScroll = true;
private static final int CHANGE_ADS = 0;
private Timer mTimer = null;
private MyTimertask myTimertask = null;
public ViewPagerRollHelper(ViewPager viewPager, PagerAdapter pagerAdapter) {
mViewPager = viewPager;
mPagerAdapter = pagerAdapter;
}
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case CHANGE_ADS:
newPosition = (Integer) msg.obj;
mViewPager.setCurrentItem(newPosition);
break;
}
}
};
public void autoScroll() {
maxPosition = mPagerAdapter.getCount() - 1;
if (isAutoScroll && maxPosition > 0) {
if (mTimer != null) {
mTimer.cancel();
mTimer = null;
}
mTimer = new Timer();
if (myTimertask != null) {
myTimertask.cancel();
myTimertask = null;
}
if (null == myTimertask)
myTimertask = new MyTimertask();
mTimer.schedule(myTimertask, 3000, 3000);
}
}
public void setPagerChangeEvent(int curIndex) {
newPosition = curIndex;
oldPosition = newPosition - 1;
autoScroll();
}
class MyTimertask extends TimerTask {
@Override
public void run() {
if (newPosition >= 0 && newPosition < maxPosition) {
newPosition += 1;
} else if (newPosition == maxPosition) {
newPosition = 0;
}
Message message = handler.obtainMessage();
message.what = CHANGE_ADS;
message.obj = newPosition;
handler.sendMessage(message);
}
}
public void setAutoScroll(boolean isAutoScroll) {
this.isAutoScroll = isAutoScroll;
}
}