###代碼實現 自定義ViewPagerandroid
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(new BannerPagerAdapter());
}
//ViewPager在滑動的時候會一直不斷的建立和銷燬子View 因此它不會有內存泄露的狀況出現
class BannerPagerAdapter 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);
return itemView;
}
//銷燬ViewPager的只View
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
object=null;
}
}
}
複製代碼
建立Adapterbash
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>
複製代碼
初始化加載顯示ide
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;
}
});
}
複製代碼
此文章後續會增長更多的代碼解釋和擴展 敬請期待~~~佈局