AndroidはView Pagerを使って循環広告ビットを実現します。
2195 ワード
どのように循環再生を実現しますか?
現在ネット上で循環再生が実現されているのは、いずれもadapperのget Count()方式で大きな値を返し、instantiateItem(View Group container,int position)で余暇を取ることによって、Viewgerをどんどん再生させています。
ここではデータソースを修正し、currentItemを設定することにより実現します。
データソースを変更:
自動サイクルはどうやって実現されますか?
自動サイクルを実現するには、Timer、Handler、Alarmなどの方法が多い。ここでは私たちはHandleの方式を使います。
カスタムHandlerクラスは以下の通りです。
注意:
CurrrentItemを設定する時は必ずOnPageChape Listenerで行い、AdapterのfinishUpdate(View view)では白画面が設定されます。どなたかご存じの方、よろしくお願いします。
現在ネット上で循環再生が実現されているのは、いずれもadapperのget Count()方式で大きな値を返し、instantiateItem(View Group container,int position)で余暇を取ることによって、Viewgerをどんどん再生させています。
ここではデータソースを修正し、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を設定するには、OnPageChange Listenerオブジェクトで行う必要があります。
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);
}
}
}
データを取得して、Viewer PagerにAdapterを設定してから自動サイクルを開始できます。
if(!(mHandler!=null && mHandler.get()!=null)){
mHandler = new WeakReference<BannerHander>(new BannerHander());
}
mHandler.get().sendEmptyMessageDelayed(1, 300);
ここでは弱い引用を使っています。主にメモリオーバーフローを防ぐためです。注意:
CurrrentItemを設定する時は必ずOnPageChape Listenerで行い、AdapterのfinishUpdate(View view)では白画面が設定されます。どなたかご存じの方、よろしくお願いします。