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