一:首先导入相应的依赖和权限
implementation 'com.squareup.okhttp3:okhttp:3.6.0'
implementation 'com.squareup.okio:okio:1.11.0'
implementation 'com.github.bumptech.glide:glide:3.7.0'
implementation 'com.google.code.gson:gson:2.2.4'
权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
二:布局xml
<android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="250dp"></android.support.v4.view.ViewPager>
三:接口ICallback
public interface ICllback {
void onSuccess(Object obj);
void onFailed(Exception e);
}
四:网络接口
public class HttpUtils {
private static volatile HttpUtils instance;
private OkHttpClient client;
private Handler handler = new Handler();
private HttpUtils(){
client = new OkHttpClient();
}
public static HttpUtils getInstance() {
if (instance == null){
synchronized (HttpUtils.class){
if (null == instance){
instance = new HttpUtils();
}
}
}
return instance;
}
public void get(String url, final ICllback callBack, final Type type){
Request request=new Request.Builder().get().url(url).build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
callBack.onFailed(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String result=response.body().string();
Gson gson = new Gson();
final Object o = gson.fromJson(result,type);
handler.post(new Runnable() {
@Override
public void run() {
callBack.onSuccess(o);
}
});
}
});
}
}
五:Model层
public class IMdel {
public void login(String url, ICllback callBack, Type type){
HttpUtils.getInstance().get(url,callBack,type);
}
}
六:View层
public interface IView<T> { void success(T t); void failed(Exception e); }
七:Presenter层
public class IPresenter {
private List<BannerBean.DataBean> data;
private IView iv;
private IMdel model;
public void attach(IView iv) {
this.iv = iv;
model = new IMdel();
}
public void detach() {
if (iv != null) {
iv = null;
}
}
public void Banner(String url) {
final Type type = new TypeToken<BannerBean>() {
}.getType();
model.login(url, new ICllback() {
@Override
public void onSuccess(Object obj) {
BannerBean banner = (BannerBean) obj;
if (banner != null) {
//List<BannerBean.DataBean> data = (List<BannerBean.DataBean>) banner.getData();
List<BannerBean.DataBean> data = banner.getData();
Log.i("12432545", "success: "+data.size());
iv.success(data);
}
}
@Override
public void onFailed(Exception e) {
iv.failed(e);
}
}, type);
}
}
八:adapter层
public class BannerAdapter extends PagerAdapter {
private Context context;
private List<BannerBean.DataBean> data;
public BannerAdapter(Context context, List<BannerBean.DataBean> data) {
this.context = context;
this.data = data;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
ImageView imageView = new ImageView(context);
imageView.setScaleType(imageView.getScaleType().FIT_XY);
BannerBean.DataBean dataBean1 = data.get(position % data.size());
String icon = dataBean1.getIcon();
//如果需要截取接口字符串,则写这种方法
//
Glide.with(context).load(StringUtils.httputil(icon)).into(imageView);
//如果不需要,就写这种方法
Glide.with(context).load(icon).into(imageView);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
//一定要删除 super.destroyItem(container, position, object);
container.removeView((View) object);
}
}
九:主页面MainActivity
public class MainActivity extends AppCompatActivity implements IView<List<BannerBean.DataBean>> {
private ViewPager view_pager;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0) {
int current = vp_banner.getCurrentItem();
vp_banner.setCurrentItem(current+1);
sendEmptyMessageDelayed(0, 2000);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view_pager = findViewById(R.id.view_pager);
IPresenter presenter = new IPresenter();
presenter.attach(this);
presenter.Banner("http://www.zhaoapi.cn/ad/getAd");
}
@Override
public void success(List<BannerBean.DataBean> dataBeans) {
BannerAdapter adapter = new BannerAdapter(MainActivity.this,dataBeans);
view_pager.setAdapter(adapter);
handler.sendEmptyMessageDelayed(0,2000);
}
@Override
public void failed(Exception e) {
}
}