looperPager代码
public class LooperPager extends LinearLayout {
private TextView textView;
private ViewPager viewPager;
private LinearLayout linearLayout;
private BindTitleListener mTitleListener = null;
private InnerAdapter innerAdapter;
public LooperPager(Context context) {
this(context,null);
}
public LooperPager(Context context, @Nullable AttributeSet attrs) {
this(context,attrs,0);
}
public LooperPager(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
LayoutInflater.from(context).inflate(R.layout.looper_pager_layout,this,true);
init();
}
private void init() {
initView();
initEvent();
}
private void initEvent() {
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
//切换的一个回调方法
}
@Override
public void onPageSelected(int position) {
//切换停下来的回调
if (innerAdapter != null){
//设置标题
int realPosition = position % innerAdapter.getDataSize();
if (mTitleListener != null){
textView.setText(mTitleListener.getTitle(realPosition));
}
//切换指示器焦点
updatePoint();
}
}
@Override
public void onPageScrollStateChanged(int state) {
//切换状态改变的回调
}
});
}
public interface BindTitleListener{
String getTitle(int position);
}
public void setData(InnerAdapter adapter,BindTitleListener listener){
this.mTitleListener = listener;
viewPager.setAdapter(innerAdapter);
// viewPager.setCurrentItem(Integer.MAX_VALUE/2 + 1);
this.innerAdapter = adapter;
//根据数据个数,来创建圆点
updatePoint();
}
public abstract static class InnerAdapter extends PagerAdapter{
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
//初始化
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
int realPosition = position % getDataSize();
View view = getView(container,realPosition);
container.addView(view);
return view;
}
protected abstract int getDataSize();
protected abstract View getView(ViewGroup container, int position);
}
private void updatePoint() {
if (innerAdapter != null && mTitleListener !=null){
int count = innerAdapter.getDataSize();
linearLayout.removeAllViews();
for (int i = 0; i < count; i++) {
View point = new View(getContext());
if (viewPager.getCurrentItem() % innerAdapter.getDataSize() == i){
point.setBackgroundColor(Color.parseColor("#ff0000"));
}else {
point.setBackgroundColor(Color.parseColor("#ffffff"));
}
//设置大小
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(SizeUtils.dip2px(getContext(),5),SizeUtils.dip2px(getContext(),5));
layoutParams.setMargins(SizeUtils.dip2px(getContext(),5),0,SizeUtils.dip2px(getContext(),5),0);
point.setLayoutParams(layoutParams);
//添加到容器里面
linearLayout.addView(point);
}
}
}
private void initView() {
viewPager = this.findViewById(R.id.loop_pager);
textView = this.findViewById(R.id.loop_title_text);
linearLayout = this.findViewById(R.id.linearlayout_loop);
}
SecMainActivity
public class SecMainActivity extends AppCompatActivity {
private List<PagerItem> data = new ArrayList<>();
private LooperPager view;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sec_main);
initData();
initView();
}
private void initData() {
data.add(new PagerItem("第一个图片", R.mipmap.pc1));
data.add(new PagerItem("第二个图片", R.mipmap.pc2));
data.add(new PagerItem("第三个图片", R.mipmap.pc3));
data.add(new PagerItem("第四个图片", R.mipmap.pc4));
}
private void initView() {
view = this.findViewById(R.id.sec_looperPager);
view.setData(new LooperPager.InnerAdapter() {
@Override
protected int getDataSize() {
return data.size();
}
@Override
protected View getView(ViewGroup container, int position) {
ImageView iv = new ImageView(container.getContext());
iv.setImageResource(data.get(position).getPicResId());
iv.setScaleType(ImageView.ScaleType.FIT_XY);
return iv;
}
}, new LooperPager.BindTitleListener() {
@Override
public String getTitle(int position) {
return data.get(position).getTitle();
}
});
}
运行截图

还要这几个提示
W/mple.looerpage: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
W/mple.looerpage: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
@Override
protected View getView(ViewGroup container, int position) {
ImageView iv = new ImageView(container.getContext());
iv.setImageResource(data.get(position).getPicResId());
iv.setScaleType(ImageView.ScaleType.FIT_XY);
return iv;
}
这里你没有添加到container里去呀,你去学习一下ViewPager如何使用吧。