編輯:關於Android編程
如何實現循環播放
現在網上實現循環播放都是在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)中設置會出現白屏的情況。如果哪位大神知道,麻煩指教下。
一加手機與錘子手機一直以來備受關注,近日陸續傳出一加2與錘子2的消息,而且兩者都選在7月28日同一天舉行手機發布會,是不是覺得很有趣?那麼,一加手機2和錘子
當Android系統捕獲到用戶的各種輸入事件後,如何准確的傳遞給真正的需要這個事件的控件?Android提供了一整套完善的事件傳遞、處理機制,來幫助開發者完成准確的事件分
一、為什麼要進行屏幕適配某廠商統計如下數據2012年,支持Android的設備共有3997種 2013年,支持Android的設備共有11868種 2014年,支持And
從Android Studio 1.3 Beta1開始,就支持了NDK。不過使用的是一個全新的實驗性的gradle構建工具。官方地址http://tools.androi