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);
}
}
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);
}
}