/**
* 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<View> 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++) {
.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<View>();
// 设置当前选中
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);
}
}
* 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<View> 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第三方的工具,
.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<View>();
// 设置当前选中
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