package com.example.an.shoppingdetial; import android.annotation.SuppressLint; 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.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; import android.widget.Gallery; import android.widget.ImageView; import android.widget.LinearLayout; import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask; /** * Created by user on 2016/6/29. */ @SuppressWarnings("deprecation") public class BannerViewPager extends ViewPager { private Context mContext; private List<BannerBean> mAdsId; // 图片本地资源ID组 private List<BannerBean> mUrllist = new ArrayList<BannerBean>(); // 图片网络路径数组 List<ImageView> listImgs; // ImageView组 private Timer mTimer; private int curIndex = 0; private LinearLayout mOvalLayout; private int mNormalId; private int mFocusedId; private int scrollTime = 3 * 1000; // 滚动时间间隔 private MyOnItemClickListener onItemClickListener; public BannerViewPager(Context context) { super(context); } public BannerViewPager(Context context, AttributeSet attrs) { super(context, attrs); } private void init() { listImgs = new ArrayList<ImageView>(); // 图片组 int len = mUrllist.size() != 0 ? mUrllist.size() : mAdsId.size(); for (int i = 0; i < len; i++) { ImageView imageview = new ImageView(mContext); // 实例化ImageView的对象 imageview.setScaleType(ImageView.ScaleType.FIT_XY); // 设置缩放方式 imageview.setLayoutParams(new Gallery.LayoutParams( Gallery.LayoutParams.MATCH_PARENT, Gallery.LayoutParams.MATCH_PARENT)); if (mUrllist.size() == 0) {// 本地加载图片 imageview.setImageResource(Integer.valueOf(mAdsId.get(i).url)); // 为ImageView设置要显示的图片 imageview.setScaleType(ImageView.ScaleType.CENTER_CROP); } else { // 网络加载图片 // ImageLoader.getInstance().displayImage(mUrllist.get(i).getImageUrl(), // imageview, ImageLoaderUtils.getOptions()); imageview.setScaleType(ImageView.ScaleType.CENTER_CROP); } final int imagePosition = i; imageview.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (onItemClickListener != null) onItemClickListener.onItemClick(imagePosition); } }); listImgs.add(imageview); } } /** 初始化圆点 */ private void initOvalLayout() { if (mOvalLayout != null) { mOvalLayout.removeAllViews(); // 圆点的大小是 圆点窗口的 70%; int Ovalheight = (int) (mOvalLayout.getLayoutParams().height * 0.5); // 圆点的左右外边距是 圆点窗口的 20%; int Ovalmargin = (int) (mOvalLayout.getLayoutParams().height * 0.2); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( Ovalheight, Ovalheight); layoutParams.setMargins(Ovalmargin, 0, Ovalmargin, 0); for (int i = 0; i < listImgs.size(); i++) { View v = new View(mContext); // 圆点 v.setLayoutParams(layoutParams); v.setBackgroundResource(mNormalId); mOvalLayout.addView(v); } // 选中第一个 mOvalLayout.getChildAt(0).setBackgroundResource(mFocusedId); } } public void start(Context context, List<BannerBean> list, List<BannerBean> adsId, LinearLayout ovalLayout, int focusedId, int normalId) { stopTimer(); this.mContext = context; this.mUrllist = list; this.mAdsId = adsId; this.mOvalLayout = ovalLayout; this.mFocusedId = focusedId; this.mNormalId = normalId; this.curIndex = 0; init(); initOvalLayout(); ImagePaperAdapter adapter = new ImagePaperAdapter(listImgs); this.setAdapter(adapter); this.setCurrentItem(0); this.setOnPageChangeListener(new MyPageChangeListener(this)); startTimer(); } /** 设置项目点击事件监听器 */ public void setMyOnItemClickListener(MyOnItemClickListener listener) { onItemClickListener = listener; } // 项目点击事件监听器接口 public interface MyOnItemClickListener { void onItemClick(int curIndex); } class ImagePaperAdapter extends PagerAdapter { private List<ImageView> list; public ImagePaperAdapter(List<ImageView> list) { this.list = list; } @Override public int getCount() { return list.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public void destroyItem(ViewGroup container, int position, Object object) { } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView view = list.get(position); ViewParent vp = view.getParent(); if (vp != null) { ViewGroup parent = (ViewGroup) vp; parent.removeView(view); } ((ViewPager) container).addView(list.get(position)); return list.get(position); } } private class MyPageChangeListener implements OnPageChangeListener { boolean isAutoPlay = false; private BannerViewPager bannerViewPager; public MyPageChangeListener(BannerViewPager bannerViewPager) { this.bannerViewPager = bannerViewPager; } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub switch (arg0) { case 1:// 手势滑动,空闲中 isAutoPlay = false; System.out.println(" 手势滑动,空闲中"); break; case 2:// 界面切换中 isAutoPlay = true; stopTimer(); System.out.println(" 界面切换中"); break; case 0:// 滑动结束,即切换完毕或者加载完毕 if (bannerViewPager.getCurrentItem() == bannerViewPager .getAdapter().getCount() - 1 && !isAutoPlay) { bannerViewPager.setCurrentItem(0); } else if (bannerViewPager.getCurrentItem() == 0 && !isAutoPlay) { bannerViewPager.setCurrentItem(bannerViewPager.getAdapter() .getCount() - 1); } System.out.println(" 当前界面 " + bannerViewPager.getCurrentItem()); startTimer(); break; } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageSelected(int pos) { // TODO Auto-generated method stub // 这里面动态改变小圆点的被背景,来实现效果 curIndex = pos; for (int i = 0; i < listImgs.size(); i++) { mOvalLayout.getChildAt(i).setBackgroundResource(mNormalId); // 圆点取消 if (i == curIndex) mOvalLayout.getChildAt(curIndex).setBackgroundResource( mFocusedId);// 圆点选中 } } } /** 处理定时滚动任务 */ @SuppressLint("HandlerLeak") private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); curIndex = (curIndex + 1) % listImgs.size(); setCurrentItem(curIndex); } }; /** 停止自动滚动任务 */ public void stopTimer() { if (mTimer != null) { mTimer.cancel(); mTimer = null; } } /** 开始自动滚动任务 图片大于1张才滚动 */ public void startTimer() { if (mTimer == null && listImgs.size() > 1) { mTimer = new Timer(); mTimer.schedule(new TimerTask() { public void run() { handler.sendMessage(handler.obtainMessage(1)); } }, scrollTime, scrollTime); } } }