android仿Adapter實現(xiàn)自定義PagerAdapter方法示例
PagerAdapter簡介
PagerAdapter是android.support.v4包中的類,它的子類有FragmentPagerAdapter, FragmentStatePagerAdapter,這兩個adapter都是Fragment的適配器,用于實現(xiàn)Fragment的滑動效果,這兩個adapter的使用和區(qū)別這次就先不介紹了,等下次有時間再做詳細的介紹。
PagerAdapter主要是viewpager的適配器,而viewPager則也是在android.support.v4擴展包中新添加的一個強大的控件,可以實現(xiàn)控件的滑動效果,比如咱們在軟件中常見的廣告欄的滑動效果,用viewPager就可以實現(xiàn)。今天主要介紹如何使用viewPagr并重寫PagerAdapter實現(xiàn)常見廣告欄的滑動效果。
PagerAdapter用法簡介
首先,如果繼承pageradapter,至少必須重寫下面的四個方法
1. instantiateItem(ViewGroup, int)
2. destroyItem(ViewGroup, int, Object)
3. getCount()
4. isViewFromObject(View, Object)
下面我們以代碼的形式,說明這四個方法的含義以及如何使用
private class ViewPagerAdapter extends PagerAdapter {
// 獲取要滑動的控件的數(shù)量,在這里我們以滑動的廣告欄為例,那么這里就應該是展示的廣告圖片的ImageView數(shù)量
@Override
public int getCount() {
return images.size();
}
// 來判斷顯示的是否是同一張圖片,這里我們將兩個參數(shù)相比較返回即可
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
// PagerAdapter只緩存三張要顯示的圖片,如果滑動的圖片超出了緩存的范圍,就會調(diào)用這個方法,將圖片銷毀
@Override
public void destroyItem(ViewGroup view, int position, Object object) {
view.removeView(images.get(position));
}
// 當要顯示的圖片可以進行緩存的時候,會調(diào)用這個方法進行顯示圖片的初始化,我們將要顯示的ImageView加入到ViewGroup中,然后作為返回值返回即可
@Override
public Object instantiateItem(ViewGroup view, int position) {
view.addView(images.get(position));
return images.get(position);
}
}
實現(xiàn)了這四個方法,就可以實現(xiàn)滑動的效果了。
android仿Adapter實現(xiàn)自定義PagerAdapter
最近在開發(fā)中,為增加PagerAdapter的可用性與可讀性,自定義了一下PagerAdapter
public abstract class EjBasePagerAdapter<T> extends PagerAdapter {
protected List<T> list;
protected SparseArray<EjBasePagerHolder<T>> sparseArray;
public EjBasePagerAdapter(List<T> list){
this.list = list;
sparseArray = new SparseArray<>();
}
@Override
public int getCount() {
return list.size();
}
public String getIcon(int position){
return null;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
EjBasePagerHolder<T> holder = sparseArray.get(getSparsePosition(position));
if(null == holder){
holder = onBundHolder(container);
holder.setPosition(position);
holder.bindDada(list.get(position),position);
sparseArray.put(getSparsePosition(position),holder);
}
View view = holder.itemView;
container.addView(view);
return view;
}
@Override
public void notifyDataSetChanged() {
sparseArray.clear();
super.notifyDataSetChanged();
}
protected int getSparsePosition(int position){
return (position+10)*2;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
protected View inflate(int resorce, ViewGroup viewGroup) {
return LayoutInflater.from(viewGroup.getContext()).inflate(resorce, viewGroup, false);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
protected abstract EjBasePagerHolder<T> onBundHolder(ViewGroup container);
public void onDestroy(){
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
}
protected abstract class EjBasePagerHolder<D>{
/**上下文*/
protected Context mContext;
private int position;
SparseArray<View> sparseArray;
View itemView;
protected EjBasePagerHolder(View itemView){
this.itemView = itemView;
this.mContext = itemView.getContext();
sparseArray = new SparseArray<>();
initView();
}
public abstract void initView();
public View findViewById(int id){
View view = sparseArray.get(id);
if(null == view){
view = itemView.findViewById(id);
sparseArray.append(id,view);
}
return view;
}
public abstract void bindDada(D t,int position);
public void onActivityResult(int requestCode, int resultCode, Intent data) {
}
public void setPosition(int position) {
this.position = position;
}
public int getPosition() {
return position;
}
public void onDestroy(){
sparseArray.clear();
}
}
}
簡單用法
public class EjMainFmtBannerPagerAdapter extends EjBasePagerAdapter<EjMainFragmentDataBean>{
public EjMainFmtBannerPagerAdapter(List<EjMainFragmentDataBean> list) {
super(list);
}
@Override
protected EjBasePagerHolder<EjMainFragmentDataBean> onBundHolder(ViewGroup container) {
return new EjBasePagerHolder<EjMainFragmentDataBean>(LayoutInflater.from(container.getContext()).inflate(R.layout.ejmain_item_fmt_banner,null)) {
private ImageView ejmain_iv_banner;
@Override
public void initView() {
ejmain_iv_banner = (ImageView)findViewById(R.id.ejmain_iv_banner);
}
@Override
public void bindDada(EjMainFragmentDataBean t, int position) {
GlidUtil.loadUrl(t.img1,ejmain_iv_banner,mContext);
}
};
}
}
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Android使用AudioManager修改系統(tǒng)音量的方法
這篇文章主要介紹了Android使用AudioManager修改系統(tǒng)音量的方法,結(jié)合實例形式分析了AudioManager調(diào)節(jié)音量的常用方法及相關(guān)使用技巧,需要的朋友可以參考下2016-08-08
Android筆記設計范例之日記APP實現(xiàn)全流程
這篇文章主要介紹了Android筆記設計范例之日記APP實現(xiàn)全流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-01-01
Android波紋擴散效果之仿支付寶咻一咻功能實現(xiàn)波紋擴散特效
這篇文章主要介紹了Android波紋擴散效果之仿支付寶咻一咻功能實現(xiàn)波紋擴散特效的相關(guān)資料,需要的朋友可以參考下2016-02-02

