/**
 * Created by Administrator on 2017-10-26.
 */
public class CustomerViewPagerComponent extends RelativeLayout implements
        ViewPager.OnPageChangeListener {
    private final int MAX_COUNT = Integer.MAX_VALUE;
    private final int TIME_INTERVAL = 3000;
    public final int MSG_CODE = 0x986;
    private int[] imgs;
    private ImageView[] imageViews;
    private ViewPager viewPager;
    private LinearLayout linearLayout;
    @SuppressWarnings("unused")
    private List dots;
    private boolean autoPlayFlag;
    private int currentNumber;

    @SuppressWarnings("deprecation")
    public void setImgs(int[] imgs) {
        this.imgs = imgs;
        if (imgs != null) {
            imageViews = new ImageView[imgs.length];
            for (int i = 0; i < imgs.length; i++) {

                imageViews[i] = new ImageView(getContext());

               //这里使用了Glide第三方的工具,

                Glide.with(getContext()).load(imgs[i])
                        .diskCacheStrategy(DiskCacheStrategy.NONE)//设置glide加载图片不缓存
                        .into(imageViews[i]);
                imageViews[i].setScaleType(ImageView.ScaleType.FIT_XY);
            }
            // 设置适配器
            viewPager.setAdapter(new MyAdapter());
            // 设置ViewPager的默认项, 设置为长度的100倍,这样子开始就能往左滑动
            currentNumber = (imageViews.length) * 100;
            viewPager.setCurrentItem(currentNumber);
            // 设置监听器
            viewPager.setOnPageChangeListener(this);
            // 开始自动播放
            final Message message = handler.obtainMessage(MSG_CODE);
            handler.sendMessageDelayed(message, TIME_INTERVAL);
            // 设置点点
            setDot(currentNumber);
        }
    }

    // 构造
    public CustomerViewPagerComponent(Context context, AttributeSet attrs) {
        super(context, attrs);
        viewPager = new ViewPager(getContext());
        viewPager.setLayoutParams(new RelativeLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT));
        addView(viewPager);
        autoPlayFlag = true;

    }

    // 设置ViewPager的适配器
    public class MyAdapter extends PagerAdapter {
        @Override
        public int getCount() {
            return MAX_COUNT;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView(imageViews[position % imageViews.length]);
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            container.addView(imageViews[position % imageViews.length], 0);
            return imageViews[position % imageViews.length];
        }
    }

    @SuppressLint("HandlerLeak")
    public Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == MSG_CODE) {
                if (autoPlayFlag) {
                    showNext();
                }
                Message message = handler.obtainMessage(MSG_CODE);
                handler.sendMessageDelayed(message, TIME_INTERVAL);
            }

        }
    };

    public void showNext() {
        currentNumber++;
        viewPager.setCurrentItem(currentNumber);
        // 设置点点
        setDot(currentNumber);
    }

    public void showPrevious() {
        currentNumber--;
        viewPager.setCurrentItem(currentNumber);
        // 设置点点
        setDot(currentNumber);
    }

    @Override
    public void onPageScrolled(int position, float positionOffset,
            int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
        currentNumber = position;
        // 设置点点
        setDot(currentNumber);
    }

    @Override
    public void onPageScrollStateChanged(int state) {
        switch (state) {
        case ViewPager.SCROLL_STATE_IDLE:
            // 无动作、初始状态
            break;
        case ViewPager.SCROLL_STATE_DRAGGING:
            // 点击、滑屏
            autoPlayFlag = false;
            break;
        case ViewPager.SCROLL_STATE_SETTLING:
            // 释放
            autoPlayFlag = true;
            break;
        }
    }

    // 设置当前选中的点点
    private void setDot(int currentNumber) {
        // remove
        removeView(linearLayout);
        // 设置点点
        linearLayout = new LinearLayout(getContext());
        RelativeLayout.LayoutParams reLayoutParams = new RelativeLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);
        reLayoutParams.setMargins(0, 0, 0, 30);
        reLayoutParams.addRule(ALIGN_PARENT_BOTTOM);
        linearLayout.setLayoutParams(reLayoutParams);
        linearLayout.setOrientation(LinearLayout.HORIZONTAL);
        linearLayout.setGravity(Gravity.CENTER);
        addView(linearLayout);
        dots = new ArrayList();
        // 设置当前选中
        int current = currentNumber % imgs.length;
        for (int i = 0; i < imgs.length; i++) {
            View view = new View(getContext());
            if (current == i) {
                view.setBackgroundResource(R.drawable.dot_focused);
            } else {
                view.setBackgroundResource(R.drawable.dot_normal);
            }
            LinearLayout.LayoutParams layoutparams = new LinearLayout.LayoutParams(
                    30, 30);
            layoutparams.setMargins(8, 0, 8, 0);
            view.setLayoutParams(layoutparams);
            linearLayout.addView(view);
        }
    }

}


MainActivity:

customerViewPagerComponent = (CustomerViewPagerComponent) findViewById(R.id.customerViewPager);

        customerViewPagerComponent.setImgs(imgs);//imgs是图片数组,可以是图片id,也可以是网络图片的url



更多相关文章

  1. Android 旋转图片
  2. Android 获取网络图片
  3. Android 图片加载缓存
  4. Android 系统图片
  5. 图片压缩
  6. Android三种方法设置ImageView的图片
  7. Android 如何加载大图片
  8. Android 图片加载库Glide
  9. android 自定义图片剪裁

随机推荐

  1. 将数据从jQuery Ajax发送到MVC COntrolle
  2. ASP.NET下使用jQuery UI下的Dialog,服务器
  3. 鼠标悬浮停留三秒 显示大图
  4. js/jquery常用方法------复制粘贴至剪切
  5. 发布一个基于jquery的无限层级下拉控件
  6. 在Fancybox jquery中打开YouTube视频
  7. 为什么JSLint说这个jQuery中缺少分号?
  8. angular中的jqLite所包含的jquery API
  9. jquery mobile界面数据刷新
  10. SprngMVC整合jquery的json 最简单的例子