/**
 * 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. 图片压缩
  5. Android(Java):按钮复选框点中效果
  6. android density
  7. Android使用libjpeg实现图片压缩
  8. android访问网络,下载图片,并设置UI
  9. Android(安卓)Retrofit与Spring后台配合,实现单张、多张图片上传

随机推荐

  1. Android(安卓)飞行模式的设置(打开/关闭
  2. android 绘制图片的一部分
  3. 第一个安卓程序访问服务器的Servlet,Servl
  4. drawSelectorOnTop的作用
  5. [Android]GreenDao(1)--项目配置
  6. NDK 入门
  7. [Android] View控件显示隐藏动画效果
  8. Android(安卓)Camera2 Hal3(二)startPrev
  9. android中的AIDL学习笔记
  10. Android中基本Dialog对话框