CustomView
Introduction: 自定义 View 系列源码
Tags:
# easy-mvp 项目
====
项目框架采用 RxJava + Retrofit + AndroidX + JetPack + MVP + 模块化方式搭建,屏幕适配方面采用的是今日头条的适配方案,注释详尽,是一个适合新手入门,老手快速开发的框架。
2. 模块介绍
a. base 模块:主要是针对 activity,fragment,presenter,view 接口的封装,同时针对 rv 适配器和下拉刷新框架做了封装,并且提供了大量工具类。
b. data 模块:主要是对接口请求 request,接口响应 response,api 提供类,okhttp,retrofit,拦截器,接口回调等配合搭建的网络框架。
c. fastble 模块:主要是针对蓝牙操作封装的一个快速开发框架。
d. widget 模块:是我自定义 View 的模块。
3. 项目使用
a. 定义一个 Activity 继承 AbsBaseActivity,实现 getPresenter 和 getLayoutId 方法,前者是创建 Presenter 对象,后者是加载布局
public class TestActivity extends AbsBaseActivity<TestPresenter> implements ITestView {
@Override
protected int getLayoutId() {
return R.layout.activity_main;
}
@Override
protected TestPresenter getPresenter() {
return new TestPresenter(this, this);
}
@OnClick(R.id.button_test)
void onClickButtonTest() {
mPresenter.getHomeArticles(1);
}
// 数据请求成功回调
@Override
public void setData(HomeArticleRespVO.Data data) {
LogUtil.e(TAG, data != null ? data.toString() : null);
}
// 数据请求失败回调
@Override
public void onError(String msg, String code) {
ToastUtil.showShortToast(this, msg);
}
}
b. 创建一个 presenter,里面定义网络请求方法,定义为 TestPresenter
public class TestPresenter extends AbsBasePresenter<ITestView> {
private final IServiceApi mServiceApi;
public TestPresenter(@NonNull Context context,ITestView view) {
super(context,view);
mServiceApi = mApiManager.createApi(IServiceApi.class);
}
// 网络请求方法
public void getHomeArticles(final int page) {
ResponseObserverCallBack<HomeArticleRespVO.Data, HomeArticleRespVO> observer =
new ResponseObserverCallBack<HomeArticleRespVO.Data, HomeArticleRespVO>() {
@Override
public void onSuccess(HomeArticleRespVO.Data data) {
if (getView() != null) {
getView().setData(data);
}
}
@Override
public void onFailure(String code, String errMessage) {
if (getView() != null) {
getView().onError(errMessage, code);
}
}
};
Observable<HomeArticleRespVO> observable = mServiceApi.getHomeArticles(page);
requestData(observable, observer);
}
}
c. 一个网络请求就是这么简单,不需要考虑页面生命周期,因为已经通过 JetPack 组件处理了,不需要考虑 rxjava 内存泄漏问题,因为通过 AutoDispose 处理了,不需要每次都处理 loading 的显示和关闭,因为通过 JetPack 的 liveData 对象已经在 AbsBaseActivity 里面统一处理了 loading 的显示和关闭,使用起来非常简洁方便。
4. 项目设计技术点和开源库
- 模块化开发
- mvp
- rxjava
- rxandroid
- retrofit
- okhttp
- lifecycle
- livedata
- glide
- eventbus
- butterknife
- SmartRefreshLayout
- autodispose
- rxpermissions
- BaseRecyclerViewAdapterHelper
- timber
- banner
- kotlin
- statusbarutil
5. 自定义 View 模块 Widget 介绍
a. 自定义 View
- 自定义 View 实战之开关按钮实现
- 自定义 View 实战之仿土豆 Loading 实现
- 自定义 View 实战之渐变,可拨动,带动画圆环控件实现
- 自定义 View 实战之饼状图效果实现
- 自定义 View 实战之仿 QQ 小红点实现
- 自定义 View 实战之仿雷达蜘蛛网实现
- 自定义 View 之钟表盘实现
b. 自定义 ViewGroup 系列
6. 点击进入我的博客
7. 联系方式
QQ:1509815887
8. 感谢
如果觉得好就给我右上角 star 点一下吧, 如果觉得不好 欢迎批评指点 ,感谢。