Android ViewPager 焦点图轮播
目前很多App都用了焦点图,假如你喜欢玩LoL那么掌上英雄联盟绝对是你的最爱,假如你看新闻网易新闻客户端绝对是首选,他们首页中就运用了焦点图。废话不多说,来看看怎么实现焦点图轮播。
1、首先上图,有效果才有动力。
2、代码实现
2.1首先自定义一个viewpager类 BaseViewPager, 设置其是否可以滚动
public class BaseViewPager extends ViewPager {
private boolean isScroll = true;
public BaseViewPager(Context context) {
super(context);
}
public BaseViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* 设置是否可滚动
* @param enable
*/
public void setScrollable(boolean enable) {
this.isScroll = enable;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (isScroll) {
return super.onInterceptTouchEvent(ev);
} else {
return false;
}
}
}
2.2 定义一个类CycleViewPagerHandler 为了防止内存泄漏,定义外部类,防止内部类对外部类的引用
public class CycleViewPagerHandler extends Handler{
private Context context;
public CycleViewPagerHandler(Context context) {
this.context = context;
}
}
2.3 自定义一个Fragment类 CycleViewPager 用于实现viewpager轮播
public class CycleViewPager extends Fragment {
@butterknife.Bind(R.id.viewPager)
BaseViewPager viewPager;
@butterknife.Bind(R.id.title_indicator)
TextView titleIndicator;
@butterknife.Bind(R.id.dot_indicator)
LinearLayout dotIndicator;
@butterknife.Bind(R.id.foot)
RelativeLayout foot;
private BaseViewPager parentViewPager;
private CycleViewPagerHandler handler;
private CycleViewPagerListener listener;
private List<AdInfo> infos;
private List<ImageView> imageViews = new ArrayList<ImageView>();
private ImageView[] indicators; //底部圆点指示器
private ViewPagerAdapter adapter;
private CycleViewPagerListener cycleViewPagerListener;
private int time = 5000; //默认循播时间
private int currentPosition = 0; //当前轮播位置
private boolean isCycle = false; //是否循环
private boolean isWheel = false; //是否循环
private boolean isScrolling = false; //viewpager是否滚动着
private long releaseTime = 0; //手指松开、页面不滚动时间,防止手机松开后短时间进行切换
private int WHEEL = 100; //转动
private int WHEEL_WAIT = 101; //等待
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.layout_cycleviewpager, container, false);
butterknife.ButterKnife.bind(this