国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android ViewPager實現無限循環效果

2020-01-02 07:02:55
字體:
來源:轉載
供稿:網友

最近項目里有用到ViewPager來做廣告運營位展示,看到現在很多APP的廣告運營位都是無限循環的,所以就研究了一下這個功能的實現。

先看看效果


從一個方向上一直滑動,么有滑到盡頭的感覺,具體是怎么實現的呢?看下面的思路。

實現思路

此處畫了一幅圖來表達實現無限循環的思路,即在數據起始位置前插入最后一項數據,在最后一項數據后插入第一項數據,當滑動到此處時,更新頁面的索引位置就ok了 。

代碼實現

這個方法用于數據處理,其中mediaList是原始數據,newMediaList是處理完的數據,mMediaList是用于頁面顯示的數據。

public void initItemList(List<MediaIntro> mediaList){      List<MediaIntro> newMediaList = new ArrayList<MediaIntro>();      newMediaList.addAll(mediaList);      if(newMediaList.size() > 1){        //第0個位最后一個,向左拉動時,可以實現直接滑動到最后一個,最后一個是第0個,可以實現向右滑動的時直接跳到第0個        newMediaList.add(0,mediaList.get(mediaList.size() -1));        newMediaList.add(mediaList.get(0));      }      mMediaList = newMediaList;    }

完整的adapter的代碼:

public class AdImagePagerAdapter extends RecyclingPagerAdapter{    private LayoutInflater mInflater;    private List<MediaIntro> mMediaList = new ArrayList<MediaIntro>();    private boolean isInfiniteLoop; //是否無限循環    int size;    public AdImagePagerAdapter (LayoutInflater inflater ,List<MediaIntro> mediaList){      mInflater = inflater;      isInfiniteLoop = false;      initItemList(mediaList);      size = mMediaList.size();    }    public void initItemList(List<MediaIntro> mediaList){      List<MediaIntro> newMediaList = new ArrayList<MediaIntro>();      newMediaList.addAll(mediaList);      if(newMediaList.size() > 1){        //第0個位最后一個,向左拉動時,可以實現直接滑動到最后一個,最后一個是第0個,可以實現向右滑動的時直接跳到第0個        newMediaList.add(0,mediaList.get(mediaList.size() -1));        newMediaList.add(mediaList.get(0));      }      mMediaList = newMediaList;    }    public MediaIntro getItem(int position){      return mMediaList.get(position);    }    public int getPosition(int position){      return isInfiniteLoop? position%size:position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {      // TODO Auto-generated method stub      final ViewHolder holder;      final MediaIntro media = getItem(position);      if(convertView == null){        holder = new ViewHolder();        convertView = mInflater.inflate(R.layout.home_ad_item, parent,false);        holder.mImageView = (ImageView)convertView.findViewById(R.id.homeAdItemImg);        holder.mTextView = (TextView)convertView.findViewById(R.id.homeAdItemTxt);        convertView.setTag(holder);      }else{        holder=(ViewHolder)convertView.getTag();      }      if(media.source.equals(MagicSource.SOURCE_OUT_AD)){        imageLoader.displayImage(adImageUrl,holder.mImageView,adImageOptions,null,null);        holder.mTextView.setText("");        holder.mImageView.setOnClickListener(new OnClickListener() {          @Override          public void onClick(View v) {            // TODO Auto-generated method stub            //廣告點擊事件          }        });      }else {        imageLoader.displayImage(media.imgUrl, holder.mImageView,adImageOptions,null,null);        holder.mTextView.setText(media.desc+"");        holder.mImageView.setOnClickListener(new OnClickListener() {          @Override          public void onClick(View v) {            // TODO Auto-generated method stub            startMediaDetail(media);          }        });      }      return convertView;    }    @Override    public int getCount() {      // TODO Auto-generated method stub      return isInfiniteLoop ? Integer.MAX_VALUE : mMediaList.size();    }    private class ViewHolder{      ImageView mImageView = null;      TextView mTextView = null;    }    public boolean isInfiniteLoop(){      return isInfiniteLoop;    }    public AdImagePagerAdapter setInfiniteLoop(boolean isInfiniteLoop){      this.isInfiniteLoop =isInfiniteLoop;      return this;    }  }

更新頁面索引的代碼:

@Override    public void onPageSelected(int position) {      // TODO Auto-generated method stub      if(adImageAdapter.getCount()>1){         if(position<1){          position=adImageAdapter.getCount()-2;          adViewPager.setCurrentItem(adImageAdapter.getCount()-2,false);        }else if(position > adImageAdapter.getCount()-2){          position = 1;          adViewPager.setCurrentItem(1, false);        }        setAdPagePointSelected(position-1);      }    }

完整的滑動監聽器代碼

public class OnAdPageChangeListener implements OnPageChangeListener{    @Override    public void onPageScrollStateChanged(int arg0) {      // TODO Auto-generated method stub    }    @Override    public void onPageScrolled(int arg0, float arg1, int arg2) {      // TODO Auto-generated method stub    }    @Override    public void onPageSelected(int position) {      // TODO Auto-generated method stub      if(adImageAdapter.getCount()>1){         if(position<1){          position=adImageAdapter.getCount()-2;          adViewPager.setCurrentItem(adImageAdapter.getCount()-2,false);        }else if(position > adImageAdapter.getCount()-2){          position = 1;          adViewPager.setCurrentItem(1, false);        }        setAdPagePointSelected(position-1);      }    }  }

以上就是本文的全部內容,希望對大家學習Android軟件編程有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沧源| 滁州市| 正安县| 章丘市| 吉隆县| 六安市| 湘西| 彰化县| 江油市| 东阿县| 沙田区| 望谟县| 怀柔区| 宜城市| 安宁市| 闻喜县| 鄂伦春自治旗| 富源县| 金昌市| 辽源市| 新泰市| 长葛市| 南靖县| 沈丘县| 大宁县| 碌曲县| 普宁市| 建湖县| 马关县| 阿鲁科尔沁旗| 普格县| 阳曲县| 洱源县| 竹北市| 辉县市| 墨竹工卡县| 贵定县| 策勒县| 长沙市| 民乐县| 灵宝市|