直接代码:
public class MyPagerView extends RelativeLayout implements ViewPager.OnPageChangeListener {
private LinearLayout layout;
private PhotoViewPager viewPager;
private PagerAdapter adapter;
private int width;
private List mList;
private Context context;
private LinearLayout.LayoutParams maxLp, minLp;
private OnPagerItemClickListener listener;
private Timer timer;
private TimerTask timerTask;
private boolean isLunBo;
public void setListener(OnPagerItemClickListener listener) {
this.listener = listener;
}
public MyPagerView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public MyPagerView(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.myviewpager, this, true);
this.context = context;
layout = (LinearLayout) findViewById(R.id.linlayout);
viewPager = (PhotoViewPager) findViewById(R.id.myViewPager);
WindowManager menager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics metrics = new DisplayMetrics();
menager.getDefaultDisplay().getMetrics(metrics);
//获得一个基准尺寸
width = metrics.widthPixels / 50;
mList = new ArrayList<>();
//初始化大点和小点的layoutparams
maxLp = new LinearLayout.LayoutParams(width, width);
minLp = new LinearLayout.LayoutParams(width*2/3, width*2/3);
}
//初始选择哪个页面
public void setCurrentItem(int position){
viewPager.setCurrentItem(position);
}
//设置viewpager的背景色
public void setViewPagerBackground(int resource){
viewPager.setBackgroundResource(resource);
}
//给viewpager设置适配器
public void setAdapter(final List list) {
adapter = new PagerAdapter() {
@Override
public int getCount() {
return list.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(list.get(position));
return list.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(list.get(position));
}
};
viewPager.setAdapter(adapter);
if (mList.size()>0){
layout.removeAllViews();
}
viewPager.setCurrentItem(0);
mList.clear();
for (int i = 0; i < list.size(); i++) {
//为viewpager的item设置点击监听,返回点击item的position
View mView = list.get(i);
final int finalI = i;
mView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (listener != null) {
listener.onClick(finalI);
}
}
});
//设置viewpager的size个数的圆点
View view = View.inflate(context, R.layout.pointlayout, null);
LinearLayout linearLayout = (LinearLayout) view.findViewById(R.id.imageLayout);
ImageView imageView = (ImageView) view.findViewById(R.id.imageView);
ViewGroup.LayoutParams layoutParams = linearLayout.getLayoutParams();
layoutParams.height = width;
layoutParams.width = width;
linearLayout.setLayoutParams(layoutParams);
imageView.setLayoutParams(minLp);
layout.addView(view);
mList.add(imageView);
}
if (mList.size() > 0) {
mList.get(0).setLayoutParams(maxLp);
}
viewPager.setOnPageChangeListener(this);
viewPager.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (isLunBo) {
stopLunBo();
}
break;
case MotionEvent.ACTION_UP:
if (isLunBo) {
startLunBo();
}
break;
}
return false;
}
});
}
//是否设置轮播功能
public void setLunBo(boolean isLunBo) {
this.isLunBo = isLunBo;
if (this.isLunBo) {
startLunBo();
} else {
stopLunBo();
}
}
//初始轮播速度
private int speed = 2000;
//设置轮播的速度
public void setSpeed(int speed) {
this.speed = speed;
}
//开始轮播,使用计时器定时发送mess
private void startLunBo() {
if (timer != null || timerTask != null) {
timerTask.cancel();
timerTask = null;
timer.purge();
timer.cancel();
timer = null;
}
timer = new Timer(true);
timerTask = new TimerTask() {
@Override
public void run() {
int currentItem = viewPager.getCurrentItem() + 1;
if (currentItem == viewPager.getAdapter().getCount()) {
currentItem = 0;
}
handler.sendEmptyMessage(currentItem);
}
};
timer.schedule(timerTask, 3000, speed);
}
private void stopLunBo() {
if (timer != null || timerTask != null) {
timerTask.cancel();
timerTask = null;
timer.purge();
timer.cancel();
timer = null;
}
}
//使用handler吧接收到的message的what值设置为选中页
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
viewPager.setCurrentItem(msg.what);
}
};
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
//遍历集合,设置选中position 上的图片圆点为大点其他为小点
for (ImageView imageView :
mList) {
imageView.setLayoutParams(minLp);
}
mList.get(position).setLayoutParams(maxLp);
}
@Override
public void onPageScrollStateChanged(int state) {
}
public interface OnPagerItemClickListener {
void onClick(int position);
}
}
布局文件:
PointLayout如下:
public class PhotoViewPager extends ViewPager {
private boolean isLocked;
public PhotoViewPager(Context context) {
super(context);
isLocked = false;
}
public PhotoViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
isLocked = false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (!isLocked) {
try {
return super.onInterceptTouchEvent(ev);
} catch (Exception e){
e.printStackTrace();
return false;
}
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return !isLocked&&super.onTouchEvent(ev);
}
}
public class PhotoViewPager {
public static void show(Context context, List list, final Window window, int position){
View view=View.inflate(context, R.layout.myphotoviewpager,null);
MyPagerView pagerView= (MyPagerView) view.findViewById(R.id.pagerView);
final List pagerList=new ArrayList<>();
if (list.size()>0){
for (int i = 0; i < list.size(); i++) {
View v=View.inflate(context,R.layout.wuyeimagepageritem,null);
PhotoView photoView= (PhotoView) v.findViewById(R.id.photoView);
Glide.with(context).load(list.get(i)).into(photoView);
pagerList.add(v);
}
pagerView.setAdapter(pagerList);
pagerView.setCurrentItem(position);
}
final WindowManager.LayoutParams attributes = window.getAttributes();
attributes.alpha=0.0f;
window.setAttributes(attributes);
PopupWindow popupWindow=new PopupWindow(view,
ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT,true);
popupWindow.setBackgroundDrawable(new BitmapDrawable());
popupWindow.setOutsideTouchable(false);
popupWindow.showAtLocation(view, Gravity.CENTER,0,0);
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
attributes.alpha=1.0f;
window.setAttributes(attributes);
}
});
}
}
布局文件:
这里使用第三方jar包Glide去加载图片,可以加载本地的也可以加载网络图片,还有用到 PhotoView控件