效果图是:手势可以左右滑动界面,并且自动从第一张开始轮播到最后一张图片,紧接着开始从最后一张图片开始向反方向第一张轮播
源码地址就不传了,代码已经贴出,你可以随便放5张图片即可
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.welcomeactivity.MainActivity" >
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </android.support.v4.view.ViewPager>
    <LinearLayout
        android:id="@+id/ll_points"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:orientation="horizontal" >
    </LinearLayout>
</RelativeLayout>package com.example.welcomeactivity;
import java.util.ArrayList;
import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
public class MainActivity extends Activity implements OnPageChangeListener {
	private ViewPager viewpager;
	private LinearLayout ll_points;
	private ArrayList<ImageView> imageViews;
	private int[] imageViewIDS;
	private int previousSelectPosition = 0;
	private int lunbopos = 0;
	//是否向右开始自动播放
	private boolean toRight = true;
	//是否向左开始自动播放
	private boolean toLeft = false;
	private Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			if (lunbopos <= 4) {
				viewpager.setCurrentItem(lunbopos);
				if (lunbopos == 4) {
					toRight = false;
					toLeft = true;
				}
				if (lunbopos == 0) {
					toRight = true;
					toLeft = false;
				}
			}
		}
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
		initPics();
		ll_points.getChildAt(previousSelectPosition).setEnabled(true);
		viewpager.setAdapter(new ViewPagerAdapter());
		viewpager.setOnPageChangeListener(this);
		// 自动切换页面功能
		new Thread(new Runnable() {
			@Override
			public void run() {
				while (true) {
					if (toRight) {
						SystemClock.sleep(2000);
						handler.sendEmptyMessage(0);
						lunbopos++;
					}
					if (toLeft) {
						SystemClock.sleep(2000);
						handler.sendEmptyMessage(0);
						lunbopos--;
					}
				}
			}
		}).start();
	}
	private void initPics() {
		for (int i = 0; i < imageViewIDS.length; i++) {
			ImageView imageView = new ImageView(this);
			imageView.setBackgroundResource(imageViewIDS[i]);
			imageViews.add(imageView);
			View view = new View(this);
			view.setBackgroundDrawable(getResources().getDrawable(
					R.drawable.point_background));
			LayoutParams lp = new LayoutParams(25, 25);
			lp.leftMargin = 10;
			view.setLayoutParams(lp);
			view.setEnabled(false);
			ll_points.addView(view);
		}
	}
	private void initView() {
		viewpager = (ViewPager) findViewById(R.id.viewpager);
		ll_points = (LinearLayout) findViewById(R.id.ll_points);
		imageViews = new ArrayList<ImageView>();
		imageViewIDS = new int[] { R.drawable.bg1, R.drawable.bg2,
				R.drawable.bg3, R.drawable.pic_01, R.drawable.pic_02 };
	}
	class ViewPagerAdapter extends PagerAdapter {
		@Override
		public int getCount() {
			return imageViews.size();
		}
		/**
		 * 判断出去的view是否等于进来的view 如果为true直接复用
		 */
		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == arg1;
		}
		/**
		 * 销毁预加载以外的view对象, 会把需要销毁的对象的索引位置传进来就是position
		 */
		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			container.removeView(imageViews.get(position));
		}
		/**
		 * 创建一个view
		 */
		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			container.addView(imageViews.get(position));
			return imageViews.get(position);
		}
	}
	@Override
	public void onPageScrollStateChanged(int position) {
	}
	@Override
	public void onPageScrolled(int arg0, float arg1, int arg2) {
	}
	@Override
	public void onPageSelected(int position) {
		ll_points.getChildAt(previousSelectPosition).setEnabled(false); // 把前一个点置为normal状态
		ll_points.getChildAt(position).setEnabled(true); // 把当前选中的position对应的点置为enabled状态
		previousSelectPosition = position;
	}
}
point_background.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/point_enable" android:state_enabled="true"></item>
    <item android:drawable="@drawable/point_normal" android:state_enabled="false"></item>
</selector><?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >
    
    <corners android:radius="5dip" />
    <solid android:color="#aaFFFFFF"/>
</shape>
point_normal.xml<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >
    
    <corners android:radius="5dip" />
    <solid android:color="#55000000" />
</shape>
ViewPager手势切换页面+图片左右轮播效果(精简版本)
原文:http://blog.csdn.net/u013210620/article/details/46537283