無限輪播圖
阿新 • • 發佈:2018-12-21
1.Applation設定全域性(記得在清單檔案中註冊)
public class App extends Application { @Override public void onCreate() { super.onCreate(); ImageLoader.getInstance().init( new ImageLoaderConfiguration.Builder(this) .memoryCacheSizePercentage(10) .discCacheSize(50 * 1024 * 1024) .defaultDisplayImageOptions( new DisplayImageOptions.Builder() .showImageOnFail(R.mipmap.ic_launcher) .showImageOnLoading(R.mipmap.ic_launcher) .cacheInMemory(true) .cacheOnDisk(true) .build() ) .build() ); } }
2.Fragment頁面
public class Fone extends Fragment { private ViewPager pager; private TextView textView; private LinearLayout layout; private PhotoBase photoBase; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //載入檢視 View v = inflater.inflate(R.layout.fone,container,false); //獲取資源ID pager = v.findViewById(R.id.photo_pager); textView = v.findViewById(R.id.text); layout = v.findViewById(R.id.itemlayout); photoBase = new PhotoBase(getActivity()); return v; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); //新增介面卡 pager.setAdapter(photoBase); //設定監聽 pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { //快取的點 private int cacheIndex = -1; @Override public void onPageScrolled(int i, float v, int i1) { } @Override public void onPageSelected(int i) { //給textview重新賦值 textView.setText(photoBase.getItem(i).getDescription()); //改變當前的點 layout.getChildAt(i % layout.getChildCount()).setSelected(true); //還原原來的點 if(cacheIndex >= 0){ layout.getChildAt(cacheIndex % layout.getChildCount()).setSelected(false); } cacheIndex = i; } @Override public void onPageScrollStateChanged(int i) { } }); initdata(); } //3.輪播 private void initdata(){ NetUtil.getJson("https://api.tianapi.com/wxnew/?key=c4aa776e0a51d57d6750511e2baa46b6&num=6&page=1", PhotoBean.class, new NetUtil.CallBack<PhotoBean>() { @Override public void success(PhotoBean o) { photoBase.setdata(o.getNewslist()); initcir(o.getNewslist().size()); //得到圖片播放位置 int count = photoBase.getCount()/2; count = count - count%o.getNewslist().size(); //設定圖片播放位置 pager.setCurrentItem(count); startlooper(); } }); } //1.無線輪播 @SuppressLint("HandlerLeak") private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { pager.setCurrentItem(pager.getCurrentItem()+1); handler.sendEmptyMessageDelayed(0,2000); } }; //2.開始輪播 private void startlooper(){ handler.removeMessages(0); handler.sendEmptyMessageDelayed(0,2000); } //初始化小圓點 private void initcir(int size){ layout.removeAllViews(); for(int i = 0;i < size;i++){ ImageView imageView = new ImageView(getActivity()); imageView.setBackgroundResource(R.drawable.selectyd); //佈局引數 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, getResources().getDisplayMetrics()); params.rightMargin = margin; params.leftMargin = margin; layout.addView(imageView,params); } } }
3.Bean類
public class PhotoBean { private int code; private List<NewslistBean> newslist; public int getCode() { return code; } public void setCode(int code) { this.code = code; } public List<NewslistBean> getNewslist() { return newslist; } public void setNewslist(List<NewslistBean> newslist) { this.newslist = newslist; } public static class NewslistBean { private String description; private String picUrl; public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getPicUrl() { return picUrl; } public void setPicUrl(String picUrl) { this.picUrl = picUrl; } } }
4.介面卡
public class PhotoBase extends PagerAdapter {
private Context context;
private List<PhotoBean.NewslistBean> list;
public PhotoBase(Context context) {
this.context = context;
list = new ArrayList<>();
}
@Override
public int getCount() {
return list.size() > 0 ? 5000:0;
}
public PhotoBean.NewslistBean getItem(int position){
return list.get(position%list.size());
}
public void setdata(List<PhotoBean.NewslistBean> lists){
list.clear();
list.addAll(lists);
notifyDataSetChanged();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view == o;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
ImageView imageView = new ImageView(context);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
container.addView(imageView);
ImageLoader.getInstance().displayImage(getItem(position).getPicUrl(),imageView);
return imageView;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}