轮播图是按拉大锯大佬B站的视频写的,原本是设置了4个指示点的,从ITEM2滑到ITEM1或ITEM3再划回来指示点都没问题,每划到ITEM4后再划回来指示点个数就多了4个,该怎么解决
您的每一个用心回答,都会让这个世界变得更美好一些!
public class VKLooperPager extends LinearLayout { private VKViewPager mViewPager; private LinearLayout mPointContainer; private TextView mTitleTv; private BindTitleListener mTitleSetListener = null; private InnerAdapter mInnerAdapter = null; private OnItemClickListener mOnItemClickListener = null; private boolean mIsTitleShow; private int mPagerShowCount; private int mSwitchTime; public VKLooperPager(Context context) { this(context,null); } public VKLooperPager(Context context, @Nullable AttributeSet attrs) { this(context,attrs,0); } public VKLooperPager(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context,attrs,defStyleAttr); LayoutInflater.from(context).inflate(R.layout.looper_pager_layout,this,true); TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.looper_style); //从TypedArray中读取属性值 mIsTitleShow = ta.getBoolean(R.styleable.looper_style_is_title_show,true); mPagerShowCount = ta.getInteger(R.styleable.looper_style_show_pager_count,1); mSwitchTime = ta.getInteger(R.styleable.looper_style_switch_time,-1); ta.recycle(); init(); } private void init() { initView(); initEvent(); } private void initEvent() { mViewPager.setPagerItemClickListener(new VKViewPager.OnPagerItemClickListener() { @Override public void onItemClick(int position) { if(mOnItemClickListener != null && mInnerAdapter != null) { int realPosition = position % mInnerAdapter.getDataSize(); mOnItemClickListener.onItemClick(realPosition); } } }); mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position,float positionOffset,int positionOffsetPixels) { //切换的一个回调方法 } @Override public void onPageSelected(int position) { //切换停下来的回调 if(mInnerAdapter != null) { //停下来以后,设置标题 int realPosition = position % mInnerAdapter.getDataSize(); // if(mTitleSetListener != null) { mTitleTv.setText(mTitleSetListener.getTitle(realPosition)); } // 切换指示器焦点 updateIndicator(); } } @Override public void onPageScrollStateChanged(int state) { //切换状态改变的回调 } }); } public interface BindTitleListener { String getTitle(int position); } public void setData(InnerAdapter innerAdapter,BindTitleListener listener) { this.mTitleSetListener = listener; mViewPager.setAdapter(innerAdapter); mViewPager.setCurrentItem(Integer.MAX_VALUE / 2 + 1); this.mInnerAdapter = innerAdapter; if(listener != null) { mTitleTv.setText(listener.getTitle(mViewPager.getCurrentItem() % mInnerAdapter.getDataSize())); } //可以得到数据的个数,根据数据个数,来动态创建圆点,indicator updateIndicator(); } 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); container.removeAllViews(); } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container,int position) { final int realPosition = position % getDataSize(); View itemView = getSubView(container,realPosition); container.addView(itemView); return itemView; } protected abstract int getDataSize(); protected abstract View getSubView(ViewGroup container,int position); } public void setOnItemClickListener(OnItemClickListener listener) { this.mOnItemClickListener = listener; } public interface OnItemClickListener { void onItemClick(int position); } private void updateIndicator() { if(mInnerAdapter != null && mTitleSetListener != null) { int count = mInnerAdapter.getDataSize(); mPointContainer.removeAllViews(); if (mPointContainer == null){ for(int i = 0; i < count; i++) { View point = new View(getContext()); if(mViewPager.getCurrentItem() % mInnerAdapter.getDataSize() == i) { point.setBackgroundResource(R.drawable.shape_circle_read); } else { point.setBackgroundResource(R.drawable.shape_circle_white); } LayoutParams layoutParams = new LayoutParams(SizeUtils.dip2px(getContext(),8),SizeUtils.dip2px(getContext(),8)); layoutParams.setMargins(SizeUtils.dip2px(getContext(),5),0,SizeUtils.dip2px(getContext(),5),0); mPointContainer.addView(point); } } } } private void initView() { mViewPager = this.findViewById(R.id.looper_pager_vp); if(mSwitchTime != -1) { mViewPager.setDelayTime(mSwitchTime); } mViewPager.setOffscreenPageLimit(3); mViewPager.setPageMargin(SizeUtils.dip2px(getContext(),0)); mPointContainer = this.findViewById(R.id.looper_point_container_lv); mTitleTv = this.findViewById(R.id.looper_title_tv); if(!mIsTitleShow) { mTitleTv.setVisibility(GONE); } } }
你应该是没清空容器吧?
每次动态添加之前要清空哦。
这种问题很简单,你知道在哪里添加的,逆回去追查原因即可。
你应该是没清空容器吧?
每次动态添加之前要清空哦。
这种问题很简单,你知道在哪里添加的,逆回去追查原因即可。