Android 使用Adapter適配器模式實現無線輪播BannerView

效果圖.gif

###代碼實現 自定義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;
            }
        });
    }
複製代碼

此文章後續會增長更多的代碼解釋和擴展 敬請期待~~~佈局

相關文章
相關標籤/搜索