package in.srain.cube.views.banner; import android.content.Context; import android.content.res.TypedArray; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.RelativeLayout; import in.srain.cube.R; import in.srain.cube.views.DotView; import in.srain.cube.views.mix.AutoPlayer; public class SliderBanner extends RelativeLayout { private ViewPager mViewPager; private BannerAdapter mBannerAdapter; private ViewPager.OnPageChangeListener mOnPageChangeListener; private PagerIndicator mPagerIndicator; private AutoPlayer mAutoPlayer; protected int mIdForViewPager; protected int mIdForIndicator; protected int mTimeInterval = 2000; public SliderBanner(Context context) { this(context, null); } public SliderBanner(Context context, AttributeSet attrs) { super(context, attrs); TypedArray arr = context.obtainStyledAttributes(attrs, R.styleable.SliderBanner, 0, 0); if (arr != null) { if (arr.hasValue(R.styleable.SliderBanner_slider_banner_pager)) { mIdForViewPager = arr.getResourceId(R.styleable.SliderBanner_slider_banner_pager, 0); } if (arr.hasValue(R.styleable.SliderBanner_slider_banner_indicator)) { mIdForIndicator = arr.getResourceId(R.styleable.SliderBanner_slider_banner_indicator, 0); } mTimeInterval = arr.getInt(R.styleable.SliderBanner_slider_banner_time_interval, mTimeInterval); arr.recycle(); } } @Override protected void onFinishInflate() { mViewPager = (ViewPager) findViewById(mIdForViewPager); mPagerIndicator = (DotView) findViewById(mIdForIndicator); mViewPager.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { requestDisallowInterceptTouchEvent(true); return false; } }); mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i2) { if (mOnPageChangeListener != null) { mOnPageChangeListener.onPageScrolled(i, v, i2); } } @Override public void onPageSelected(int position) { if (mPagerIndicator != null) { mPagerIndicator.setSelected(mBannerAdapter.getPositionForIndicator(position)); } mAutoPlayer.skipNext(); if (mOnPageChangeListener != null) { mOnPageChangeListener.onPageSelected(position); } } @Override public void onPageScrollStateChanged(int i) { if (mOnPageChangeListener != null) { mOnPageChangeListener.onPageScrollStateChanged(i); } } }); mAutoPlayer = new AutoPlayer(mGalleryPlayable).setPlayRecycleMode(AutoPlayer.PlayRecycleMode.play_back); mAutoPlayer.setTimeInterval(mTimeInterval); } public void setTimeInterval(int interval) { mAutoPlayer.setTimeInterval(interval); } public void setAdapter(BannerAdapter adapter) { mBannerAdapter = adapter; mViewPager.setAdapter(adapter); } public void beginPlay() { mAutoPlayer.play(); } public void setOnPageChangeListener(ViewPager.OnPageChangeListener listener) { mOnPageChangeListener = listener; } public void setDotNum(int num) { if (mPagerIndicator != null) { mPagerIndicator.setNum(num); } } private AutoPlayer.Playable mGalleryPlayable = new AutoPlayer.Playable() { @Override public void playTo(int to) { mViewPager.setCurrentItem(to, true); } @Override public void playNext() { mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1, true); } @Override public void playPrevious() { mViewPager.setCurrentItem(mViewPager.getCurrentItem() - 1, true); } @Override public int getTotal() { return mBannerAdapter.getCount(); } @Override public int getCurrent() { return mViewPager.getCurrentItem(); } }; }