今天我们一起探讨一下通过banner实现轮播图,今天我们就来写一下.
banner轮播依赖在这里我们用flybanner
implementation \'com.recker.flybanner:flybanner:1.3\'
权限
<uses-permission android:name=\"android.permission.INTERNET\"/>
封装一个OkHttpUtil
public class OkHttpUtil {
private OkHttpListener mOkHttpListener;
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0://成功
String data = (String) msg.obj;
mOkHttpListener.OkHttpSuccess(data);
break;
case 1://失败
String error = (String) msg.obj;
mOkHttpListener.OkHttpError(error);
break;
}
}
};
//生成 OkHttpListener set方法
public void setOkHttpListener(OkHttpListener okHttpListener) {
mOkHttpListener = okHttpListener;
}
public OkHttpUtil OkHttpGet(String url){
//获取clench对象
OkHttpClient okHttpClient = new OkHttpClient();
//获取Request对象
Request request = new Request.Builder().url(url).build();
okHttpClient.newCall(request).enqueue(new Callback() {
/**
* 失败回调方法
* @param call
* @param e
*/
@Override
public void onFailure(Call call, IOException e) {
Message message = new Message();
message.what = 1;
message.obj = e.getMessage();
mHandler.sendMessage(message);
}
/**
* 成功回调方法
* @param call
* @param response
* @throws IOException
*/
@Override
public void onResponse(Call call, Response response) throws IOException {
Message message = new Message();
message.what = 0;
message.obj = response.body().string();
mHandler.sendMessage(message);
}
});
return this;
}
public OkHttpUtil OkHttoPost(String url, FormBody formBody){
//创建 clench 对象
OkHttpClient okHttpClient = new OkHttpClient();
//获取Request
Request request = new Request.Builder().url(url).post(formBody).build();
okHttpClient.newCall(request).enqueue(new Callback() {
/**
* 失败回调方法
* @param call
* @param e
*/
@Override
public void onFailure(Call call, IOException e) {
Message message = new Message();
message.what = 1;
message.obj = e.getMessage();
mHandler.sendMessage(message);
}
/**
* 成功回调方法
* @param call
* @param response
* @throws IOException
*/
@Override
public void onResponse(Call call, Response response) throws IOException {
Message message = new Message();
message.what = 0;
message.obj = response.body().string();
mHandler.sendMessage(message);
}
});
return this;
}
//定义一个接口,进行回调
public interface OkHttpListener{
//成功
void OkHttpSuccess(String data);
//失败
void OkHttpError(String error);
}
}
封装bean实体类
public class BannerBean {
private String msg;
private String code;
private List<DataBean> data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
private int aid;
private String createtime;
private String icon;
private productId;
private String ;
private int type;
private String url;
public int getAid() {
return aid;
}
public void setAid(int aid) {
this.aid = aid;
}
public String getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public getProductId() {
return productId;
}
public void setProductId( productId) {
this.productId = productId;
}
public String get () {
return ;
}
public void set (String ) {
this. = ;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
}
MVP
callback接口
public interface MyCallBack {
void onSuccess(List<BannerBean.DataBean> dataBeans);
void onFailed(String error);
}
view层接口
public interface BannerView {
void onBannerSuccess(List<BannerBean.DataBean> dataBeans);
void onBannerFailed(String error);
}
model层
public class BannerModel {
public void data(List<BannerBean.DataBean> dataBeans, final MyCallBack callBack){
new OkHttpUtil().OkHttpGet(Apis.BANNER_URL).setOkHttpListener(new OkHttpUtil.OkHttpListener() {
@Override
public void OkHttpSuccess(String data) {
Gson gson = new Gson();
BannerBean bannerBean = gson.fromJson(data, BannerBean.class);
List<BannerBean.DataBean> beans = bannerBean.getData();
if (bannerBean.getCode().equals(\"0\")){
callBack.onSuccess(beans);
}else {
callBack.onFailed(bannerBean.getMsg());
}
}
@Override
public void OkHttpError(String error) {
}
});
}
}
presenter层 用于view层和model层交互
public class BannerPresenter {
private BannerView mBannerView;
private BannerModel mBannerModel;
public BannerPresenter(BannerView bannerView) {
mBannerView = bannerView;
mBannerModel = new BannerModel();
}
//解绑
public void datechView(){
mBannerView = null;
}
public void bannerData(List<BannerBean.DataBean> dataBeans){
mBannerModel.data(dataBeans, new MyCallBack() {
@Override
public void onSuccess(List<BannerBean.DataBean> dataBeans) {
mBannerView.onBannerSuccess(dataBeans);
}
@Override
public void onFailed(String error) {
mBannerView.onBannerFailed(error);
}
});
}
}
MainActivity
public class MainActivity extends AppCompatActivity implements BannerView {
private FlyBanner mBanner;
private BannerPresenter mBannerPresenter;
private List<BannerBean.DataBean> mDataBeans = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
mBannerPresenter = new BannerPresenter(this);
mBannerPresenter.bannerData(mDataBeans);
}
private void initView() {
mBanner = (FlyBanner) findViewById(R.id.banner);
}
//访问数据成功
@Override
public void onBannerSuccess(List<BannerBean.DataBean> dataBeans) {
List<String> list = new ArrayList<>();
for (int i = 0; i < dataBeans.size(); i++) {
list.add(dataBeans.get(i).getIcon().replace(\"https\", \"http\"));
}
mBanner.setImagesUrl(list);
}
@Override
public void onBannerFailed(String error) {
}
/**
* 防止内存泄露
*/
@Override
protected void onDestroy() {
super.onDestroy();
mBannerPresenter.datechView();
}
}
main_activity布局
<? version=\"1.0\" encoding=\"utf-8\"?>
<LinearLayout ns:android=\"http://schemas.android.com/apk/res/android\"
ns:app=\"http://schemas.android.com/apk/res-auto\"
ns:tools=\"http://schemas.android.com/tools\"
android:layout_width=\"match_parent\"
android:layout_height=\"match_parent\"
android:orientation=\"vertical\"
tools:context=\".MainActivity\">
<com.recker.flybanner.FlyBanner
android:id=\"@+id/banner\"
android:layout_width=\"match_parent\"
android:layout_height=\"200dp\" />
</LinearLayout>
继续阅读与本文标签相同的文章
-
Apache Flink 进阶(一):Runtime 核心机制剖析
2026-05-18栏目: 教程
-
RocketMQ一个新的消费组初次启动时从何处开始消费呢?
2026-05-18栏目: 教程
-
Spring Boot2中整合atomikos来实现不同类型数据库的分布式事务一致性
2026-05-18栏目: 教程
-
Git 如何针对项目修改本地提交提交人的信息
2026-05-18栏目: 教程
-
工作几年只会增删改查怎么了,大神们都是从第一行代码开始的
2026-05-18栏目: 教程
