Android 使用Adapter介面卡模式實現無線輪播BannerView

效果圖.gif
程式碼實現
自定義ViewPager
public class BannerViewPager extends ViewPager { private BannerAdapter mAdapter; public BannerViewPager(Context context) { super(context); } public BannerViewPager(Context context, AttributeSet attrs) { super(context, attrs); } public void setAdapter(BannerAdapter adapter) { this.mAdapter = adapter; setAdapter(newBannerPagerAdapter()); } //ViewPager在滑動的時候會一直不斷的建立和銷燬子View所以它不會有記憶體洩露的情況出現 classBannerPagerAdapter extends PagerAdapter{ @Override public int getCount() { //為了實現無線迴圈ViewPager這裡設定ViewPager的最大值為Int的最大型別 return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { //官方推薦 這麼寫 return view==object; } //載入viewPager的子view @Override public Object instantiateItem(ViewGroup container, int position) { View itemView= mAdapter.getView(position); container.addView(itemView); returnitemView; } //銷燬ViewPager的只View @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); object=null; } } }
建立Adapter
public abstract class BannerAdapter { public abstract View getView(int position); }
layout佈局程式碼
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.example.administrator.allynmvp.view.BannerViewPager android:id="@+id/banner_vp" android:layout_width="match_parent" android:layout_height="150dp"> </com.example.administrator.allynmvp.view.BannerViewPager> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"> </ListView> </LinearLayout>
初始化載入顯示
public class MainActivity extends AppCompatActivity implements ViewControl { MusicDataPresenter musicDataPresenter; ListView listView; ProgressBar progressBar; TextView tvError; BannerViewPager mBannerVp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getBannerData(); } public void getBannerData() { //這裡通過網路載入無效廣告輪播的圖片 //初始化控制元件 mBannerVp.setAdapter(new BannerAdapter() { @Override public View getView(int position) { //這個可以是一個ImageView也可以是一個佈局檔案 穿一個View進去就可以這就是介面卡模式的好處 ImageView imageView=new ImageView(MainActivity.this); imageView.setBackgroundResource(R.mipmap.ic_launcher); return imageView; } }); }
此文章後續會增加更多的程式碼解釋和擴充套件 敬請期待~~~