效果图如下:
Demo3
1.merge
应用场景:复杂页面一次性要调用多个接口使用
2.flatMap
应用场景:一个接口调用时依赖另一个接口的返回值,如一个接口调用成功后才调用第二个接口或者第二个接口需要第一个接口的返回值作为参数调用
3.zip
应用场景:两个接口的数据相互结合才能显示UI
结合MVP代码实现
连接类contact
public interface IDemo3Contract {
interface View extends IView {
void setData1(String rate);
void setData2(List<TestBean2.DateBean> dataList);
void setData3(String data3);
void setData4(List<TestBean5> dataList);
}
interface Presenter extends IPresenter<View> {
void getMergeData();
void getFlatMapData(String type);
void getZipData();
}
interface Model extends IModel {
void getMergeData(Observer<Object> observer);
void getFlatMapData(String type,Observer<TestBean3> observer);
void getZipData(Observer<List<TestBean5>> observer);
}
}
数据层Model
public class Demo3Model extends BaseModel implements IDemo3Contract.Model {
@Override
public void getMergeData(Observer<Object> observer) {
NetApi netApi= NetClient.getInstance().getNetApi();
Observable.merge(netApi.getInsureRate(),netApi.getGoodsType())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
}
@Override
public void getFlatMapData(String type,Observer<TestBean3> observer) {
final NetApi netApi= NetClient.getInstance().getNetApi();
netApi.getAgreementList(type)
.flatMap(new Function<TestBean4, ObservableSource<TestBean3>>() {
@Override
public ObservableSource<TestBean3> apply(TestBean4 testBean4) throws Exception {
return netApi.getAgreementDetail(testBean4.getDate().get(0).getId());
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
}
@Override
public void getZipData(Observer<List<TestBean5>> observer) {
NetApi netApi= NetClient.getInstance().getNetApi();
Observable.zip(netApi.getAgreementList("员工须知"), netApi.getGoodsType(), new BiFunction<TestBean4, TestBean2, List<TestBean5>>() {
@Override
public List<TestBean5> apply(TestBean4 testBean4, TestBean2 testBean2) throws Exception {
//结合数据为一体
List<TestBean5> list=new ArrayList<>();
List<TestBean4.DateBean> data1=testBean4.getDate();
List<TestBean2.DateBean> data2=testBean2.getDate();
for (int i = 0; i < data1.size(); i++) {
list.add(new TestBean5(data2.get(i).getName(),data1.get(i).getTitle(),data1.get(i).getAddtime()));
}
return list;
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
}
}
业务类 presenter
public class Demo3Presenter extends BasePresenter<IDemo3Contract.View, IDemo3Contract.Model> implements IDemo3Contract.Presenter {
@Override
protected IDemo3Contract.Model createModel() {
return new Demo3Model();
}
@SuppressWarnings("unchecked")
@Override
public void getMergeData() {
mView.showDialogLoading();
mModel.getMergeData(new Observer<Object>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Object o) {
mView.dismissDialogLoading();
if (o instanceof TestBean1) {
if (((TestBean1) o).getMsg().equals(Params.SUCCESS_MSG)) {
mView.setData1(((TestBean1) o).getDate().getProportion());
} else {
mView.showMessage(((TestBean1) o).getDescribe());
}
} else if (o instanceof TestBean2) {
if (((TestBean2) o).getMsg().equals(Params.SUCCESS_MSG)) {
mView.setData2(((TestBean2) o).getDate());
} else {
mView.showMessage(((TestBean2) o).getDescribe());
}
}
}
@Override
public void onError(Throwable e) {
mView.dismissDialogLoading();
mView.errorDialog();
}
@Override
public void onComplete() {
mView.dismissDialogLoading();
}
});
}
@Override
public void getFlatMapData(String type) {
mView.showDialogLoading();
mModel.getFlatMapData(type, new Observer<TestBean3>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(TestBean3 testBean3) {
mView.dismissDialogLoading();
if (testBean3.getMsg().equals(Params.SUCCESS_MSG)) {
mView.setData3(testBean3.getData().toString());
}else {
mView.showMessage(testBean3.getDescribe());
}
}
@Override
public void onError(Throwable e) {
mView.dismissDialogLoading();
mView.errorDialog();
}
@Override
public void onComplete() {
mView.dismissDialogLoading();
}
});
}
@Override
public void getZipData() {
mView.showDialogLoading();
mModel.getZipData(new Observer<List<TestBean5>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(List<TestBean5> testBean5s) {
mView.dismissDialogLoading();
mView.setData4(testBean5s);
}
@Override
public void onError(Throwable e) {
mView.dismissDialogLoading();
mView.errorDialog();
}
@Override
public void onComplete() {
mView.dismissDialogLoading();
}
});
}
}
(一)高斯模糊实现毛玻璃效果丶共享元素动画 丶地址选择器
(二)仿京东顶部伸缩渐变丶自定义viewpager指示器丶viewpager3D回廊丶recyclerview瀑布流
(四)仿支付宝首页顶部伸缩滑动/中间层下拉刷新
(五)TabLayout+ViewPager悬浮吸顶及刷新数量动画显示
(六)仿QQ首页drawer/侧滑删除/浮动imgaeView/角标拖拽
(七)仿微信发布朋友圈拖拽删除
将持续更新.. 不喜勿喷,仅个人分享,希望能帮助到你
源码地址:Github传送门