Demo实现的效果图如下:
工程目录如下图:
一个Application,一个实体类,一个Activity,另一个是自定义的AutoPlayingViewPager继承FrameLayout。
首先看一下自定义的AutoPlayingViewPager,功能都在这里实现。采用了第三方图片加载框架:universal_image_loader;
package com.skycracks.autoplayingviewpager;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import com.nostra13.universalimageloader.core.ImageLoader;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Interpolator;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Scroller;
import android.widget.TextView;
/**
* 创建时间: 2016年1月10日 下午3:43:22<br>
* 版本: [v1.0]<br>
* 类描述: 实现ViewPager轮播图<br>
* 使用了ImageLoader 对图片进行加载,所以使用前必须初始化ImageLoader<br>
* stopPlaying() 当轮播所在页面不在顶栈时,有必要停止定时并且释放资源<br>
* startPlaying() 当再次恢复时调用<br>
*
*/
public class AutoPlayingViewPager extends FrameLayout {
private final static String TAG = "AutoPlayingViewPager";
/**
* 轮播图图片数量
*/
private int IMAGE_COUNT;
/**
* 自动轮播的时间间隔
*/
private final static int TIME_INTERVAL = 5;
/**
* 切换图片过度时间
*/
private int swapDuration = 1000;
/**
* 默认图片资源(本地图片资源Id)
*/
private int [] defaultIds = new int[] {
R.drawable.image01,R.drawable.image02,
R.drawable.image03,R.drawable.image04,R.drawable.image05};
/**
* 默认图片资源(图片URL地址)
*/
private String [] defaultUrl = new String[] {
"http://g.hiphotos.baidu.com/imgad/pic/item/a8773912b31bb051be533b24317adab44aede043.jpg",
"http://g.hiphotos.baidu.com/imgad/pic/item/c75c10385343fbf22c362d2fb77eca8065388fa0.jpg",
"http://liaoning.sinaimg.cn/2014/1111/U10435P1195DT20141111220802.jpg",
"http://photocdn.sohu.com/20151124/mp43786429_1448294862260_4.jpeg",
"http://h.hiphotos.baidu.com/image/pic/item/faedab64034f78f0b00507c97e310a55b3191cf9.jpg" };
private String [] defaultTitle = new String [] {
"今晚打老虎","今晚打松鼠","今晚打LOL","今晚打DOTA1","今晚打DOTA2"};
/**
* 自定义轮播图资源
*/
private List<AutoPlayInfo> mAutoPlayInfoList;
/**
* 放圆点的View的list
*/
private List<View> dotViewsList;
/**
* 轮播容器
*/
private ViewPager mViewPager;
/**
* 当前轮播页
*/
private int currentItem = 0;
/**
* 定时器对象
*/
private ScheduledExecutorService scheduledExecutorService;
private Context mContext;
private LayoutInflater mInflate;
/**
* ViewPageItem点击回调接口
*/
private OnPageItemClickListener onPageItemClickListener;
public void setOnPageItemClickListener(OnPageItemClickListener onPageItemClickListener){
this.onPageItemClickListener = onPageItemClickListener;
}
public interface OnPageItemClickListener{
/**
* ViewPageItem点击事件回调
*/
void onPageItemClick(int position, String adLink);
}
/**
* 消息处理器、设置当前显示页
*/
private Handler handler = new Handler() {
@Override
public void handleMessage(M