編輯:關於android開發
1、如何實現循環播放
2、如何實現自動循環
如何實現循環播放
現在網上實現循環播放都是在adapter的getCount()方法返回一個較大的值並且instantiateItem(ViewGroup container, int position)中通過取余(position/datas.size())的方式,讓ViewPager不斷的播放下去。
這裡我們通過修改數據源和設置currentItem的方式實現。
修改數據源:
final List<Integer> datas = new ArrayList<>(); //這裡添加測試數據,實際項目中可以是從網絡獲取數據 datas.add(R.mipmap.welcome_page_01); datas.add(R.mipmap.welcome_page_02); datas.add(R.mipmap.welcome_page_03); //處理數據源 datas.add(0,datas.get(datas.size()-1)); datas.add(datas.get(1));
設置currentItem需要在OnPageChangeListener對象中進行:
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { if(position==0){ mViewPager.setCurrentItem(datas.size()-2,false); }else if(position==datas.size()-1){ mViewPager.setCurrentItem(1,false); } } @Override public void onPageScrollStateChanged(int state) { } });
Adapter和一般的ViewPager的Adapter一樣即可。
如何實現自動循環:
實現自動循環,方法比較多,比如Timer,Handler,Alarm等等。這裡我們使用Handle的方式
自定義Handler類如下:
public class BannerHander extends Handler{ @Override public void handleMessage(Message msg) { if(msg.what==1){ mViewPager.setCurrentItem(mViewPager.getCurrentItem()+1); sendEmptyMessageDelayed(1,3000); } } }
獲取數據,給ViewPager設置Adapter之後就可以啟動自動循環:
if(!(mHandler!=null && mHandler.get()!=null)){ mHandler = new WeakReference<BannerHander>(new BannerHander()); } mHandler.get().sendEmptyMessageDelayed(1, 300);
這裡我們是用了弱引用,主要是為了防止出現內存溢出。
注意:
在設置CurrentItem時一定要在OnPageChangeListener中進行,Adapter的finishUpdate(View view)中設置會出現白屏的情況。如果哪位大神知道,麻煩指教下。
Android Studio教程--從Github 下載一個Repository,androidgithub從電腦上徹底刪除HelloWorld項目 回到as歡迎頁面
Greenplum(GPDB)開源啦!~ Greenplum 數據庫(GPDB)是一個無共享的大規模並行處理數據庫,主要用來處理大規模的數據分析任務,包括數據倉庫、商務
MSM8909+Android5.1.1 SPI驅動開發(PSAM部分) MSM8909+Android5.1.1SPI驅動開發(PSAM部分) 1.
使用Android studio分析內存洩露 使用Android studio分析內存洩露 This post is a permitted tra