package com.hdl.widget.CoverFlowViewPager;
|
|
import android.app.Activity;
|
import android.content.Context;
|
import android.os.Handler;
|
import android.support.v4.view.ViewPager;
|
import android.util.AttributeSet;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.widget.RelativeLayout;
|
|
|
import com.hdl.widgetxm.R;
|
|
import java.util.List;
|
|
/**
|
* Created by JLChen on 2019/8/22
|
*/
|
public class HDLCoverFlowViewPager extends RelativeLayout implements ViewPager.OnPageChangeListener {
|
private View mLayout;//布局
|
private Activity mContext;//上下文
|
private ViewPager mViewPager;//viewpager
|
private HDLCoverFlowViewPagerAdapter mPagerAdapter;//adapter
|
private List<View> mViewsList;//url数组
|
private int currentIndex = 0;//当前实际page
|
// private int startCurrentIndex = 0;//当前page
|
private long secondTime = 0, firstTime = 0;
|
|
//private Timer mTimer=null;//定时器
|
//private MyTimerTask mTimerTask=null;
|
|
private Handler mHandler = null;
|
private AutoRollRunnable mAutoRollRunnable = null;
|
private int mRollTime = 5000;
|
// private int resId_piont_press= R.mipmap.ic_banner_point_press;
|
// private int resId_piont=R.mipmap.ic_banner_point;
|
private boolean isPoint = false;//开启指示器
|
|
|
private int mScrolledCurrentIndex = 0;
|
|
|
public static interface OnClickGalleryListener {
|
void onGalleryClick(int position);
|
|
void onGalleryPositionChange(int position);
|
}
|
|
private OnClickGalleryListener mOnClickGalleryListener;
|
|
public HDLCoverFlowViewPager addGalleryListener(OnClickGalleryListener listener) {
|
mOnClickGalleryListener = listener;
|
return this;
|
}
|
|
//ui更新
|
// Handler mHandler=mHandler= new Handler(){
|
// public void handleMessage(Message msg) {
|
// int index = mViewPager.getCurrentItem()+1;//下一个页
|
// mViewPager.setCurrentItem(index);//设置此次要显示的pager
|
// currentIndex=index%mList.size();
|
// setImageBackground(currentIndex);
|
// }
|
// };
|
|
public HDLCoverFlowViewPager(Context context) {
|
super(context);
|
this.mContext = (Activity) context;
|
}
|
|
public HDLCoverFlowViewPager(Context context, AttributeSet attrs, int defStyleAttr) {
|
super(context, attrs, defStyleAttr);
|
this.mContext = (Activity) context;
|
}
|
|
public HDLCoverFlowViewPager(Context context, AttributeSet attrs) {
|
super(context, attrs);
|
this.mContext = (Activity) context;
|
|
}
|
|
/**
|
* 初始化viewpager
|
*
|
* @param list view集合
|
* @param isGallery 是否使用3D画廊效果
|
*/
|
public HDLCoverFlowViewPager initBanner(List<View> list, boolean isGallery) {
|
mViewsList = list;
|
//引入布局
|
mLayout = LayoutInflater.from(mContext).inflate(R.layout.hdl_gallery_banner_view_layout, null);
|
mViewPager = (ViewPager) mLayout.findViewById(R.id.hdl_gallery_viewPager);//关闭
|
// mLineIndicator = (LinearLayout) mLayout.findViewById(R.id.lineIndicator);
|
// //初始化位置
|
// currentIndex = startCurrentIndex%mList.size();
|
currentIndex = 0;
|
mPagerAdapter = new HDLCoverFlowViewPagerAdapter(mViewsList);
|
mPagerAdapter.setOnClickViewsListener(new HDLCoverFlowViewPagerAdapter.OnClickViewsListener() {
|
@Override
|
public void onViewsClick(int position) {
|
if (mOnClickGalleryListener != null) {
|
mOnClickGalleryListener.onGalleryClick(position);
|
}
|
}
|
});
|
|
mViewPager.setAdapter(mPagerAdapter);
|
if (isGallery) {
|
mViewPager.setPageTransformer(true, new HDLZoomPageTransformer());
|
// mViewPager.setPageTransformer(true, new CoverTransformer(0.8f,0f, 0f,25f));
|
}
|
|
mViewPager.setCurrentItem(currentIndex);
|
mViewPager.setOffscreenPageLimit(2);//设置预加载的数量,这里设置了2,会预加载中心item左边两个Item和右边两个Item
|
mViewPager.addOnPageChangeListener(this);
|
return this;
|
}
|
|
|
/**
|
* 初始化viewpager
|
*
|
* @param list view集合
|
* @param isGallery 是否使用3D画廊效果
|
* @param rotationY 旋转角度
|
*/
|
public HDLCoverFlowViewPager initBanner(List<View> list, boolean isGallery, float rotationY) {
|
mViewsList = list;
|
rotationY = dip2px(rotationY);
|
//引入布局
|
mLayout = LayoutInflater.from(mContext).inflate(R.layout.hdl_gallery_banner_view_layout, null);
|
mViewPager = (ViewPager) mLayout.findViewById(R.id.hdl_gallery_viewPager);//关闭
|
mPagerAdapter = new HDLCoverFlowViewPagerAdapter(mViewsList);
|
mPagerAdapter.setOnClickViewsListener(new HDLCoverFlowViewPagerAdapter.OnClickViewsListener() {
|
@Override
|
public void onViewsClick(int position) {
|
if (mOnClickGalleryListener != null) {
|
mOnClickGalleryListener.onGalleryClick(position);
|
}
|
}
|
});
|
|
mViewPager.setAdapter(mPagerAdapter);
|
if (isGallery) {
|
// mViewPager.setPageTransformer(true, new HDLZoomPageTransformer(alpha));
|
mViewPager.setPageTransformer(true, new CoverTransformer(0.3f,0f, 0f, rotationY));
|
|
}
|
mViewPager.setCurrentItem(currentIndex);
|
mViewPager.setOffscreenPageLimit(2);//设置预加载的数量,这里设置了2,会预加载中心item左边两个Item和右边两个Item
|
mViewPager.addOnPageChangeListener(this);
|
return this;
|
}
|
|
// /**
|
// * 添加圆角
|
// * @param corners
|
// * @return
|
// */
|
// public HDLGalleryViewPager addRoundCorners(int corners){
|
// mPagerAdapter.setmRoundCorners(corners);
|
// return this;
|
// }
|
|
/**
|
* @param columnMargin 两个Page之间的距离
|
* @param rowMargin page的外边距
|
* 注意当添加了3D画廊效果时,columnMargin尽量设小。应该本是已经进行了x、y的缩放
|
*/
|
public HDLCoverFlowViewPager addPageMargin(int columnMargin, int rowMargin) {
|
|
mViewPager.setPageMargin(dip2px(columnMargin));
|
RelativeLayout.LayoutParams layout = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
|
RelativeLayout.LayoutParams.WRAP_CONTENT);
|
layout.setMargins(dip2px(rowMargin), 0, dip2px(rowMargin), 0);
|
mViewPager.setLayoutParams(layout);
|
return this;
|
}
|
|
//
|
|
/**
|
* 配置完成,将布局添加到父容器
|
*/
|
public HDLCoverFlowViewPager finishConfig() {
|
this.addView(mLayout);
|
return this;
|
}
|
|
/**
|
* 设置是否开始自动轮播,并设置时间间隔
|
*/
|
public HDLCoverFlowViewPager addStartTimer(int time) {
|
mRollTime = time;
|
if (mHandler == null) {
|
mHandler = new Handler();
|
}
|
if (mAutoRollRunnable == null) {
|
mAutoRollRunnable = new AutoRollRunnable();
|
}
|
|
mAutoRollRunnable.start();
|
return this;
|
}
|
|
// 停止轮播
|
public void stopTimer() {
|
if (mAutoRollRunnable != null) {
|
mAutoRollRunnable.stop();
|
}
|
}
|
|
private class AutoRollRunnable implements Runnable {
|
//是否在轮播的标志
|
boolean isRunning = false;
|
|
@Override
|
public void run() {
|
if (isRunning) {
|
int index = mViewPager.getCurrentItem() + 1;//下一个页
|
mViewPager.setCurrentItem(index);//设置此次要显示的pager
|
currentIndex = index % mViewsList.size();
|
// setImageBackground(currentIndex);
|
mHandler.postDelayed(this, 1000 * mRollTime);
|
}
|
}
|
|
public void start() {
|
if (!isRunning) {
|
isRunning = true;
|
mHandler.removeCallbacks(this);
|
mHandler.postDelayed(this, 1000 * mRollTime);
|
}
|
}
|
|
public void stop() {
|
if (isRunning) {
|
mHandler.removeCallbacks(this);
|
isRunning = false;
|
}
|
}
|
}
|
|
|
/**
|
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
|
*/
|
public int dip2px(float dpValue) {
|
final float scale = mContext.getResources().getDisplayMetrics().density;
|
return (int) (dpValue * scale + 0.5f);
|
}
|
|
//---------------viewpager滑动事件-----------------
|
@Override
|
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
|
if(mScrolledCurrentIndex == position) return;
|
|
mScrolledCurrentIndex = position;
|
|
if (mOnClickGalleryListener != null) {
|
mOnClickGalleryListener.onGalleryPositionChange(mScrolledCurrentIndex);
|
}
|
}
|
|
@Override
|
public void onPageScrollStateChanged(int state) {
|
|
}
|
|
/**
|
* 滑动时同步改变底部小圆点
|
*
|
* @param position
|
*/
|
@Override
|
public void onPageSelected(int position) {
|
currentIndex = position;
|
}
|
|
|
public void updateViewsList(List<View> list){
|
mViewsList = list;
|
if(mPagerAdapter != null) {
|
mPagerAdapter.updateViewsList(mViewsList);
|
refreshViewPager();
|
}
|
}
|
|
private void refreshViewPager(){
|
currentIndex = 0;
|
mPagerAdapter.notifyDataSetChanged();
|
if(mViewsList.size() > 1) {
|
mViewPager.setCurrentItem(currentIndex + 1);
|
new Handler().postDelayed(new Runnable() {
|
@Override
|
public void run() {
|
mViewPager.setCurrentItem(currentIndex);
|
}
|
}, 1);
|
}
|
}
|
|
public void setCurrentItem(int item){
|
currentIndex = item;
|
mViewPager.setCurrentItem(item);
|
}
|
}
|