一 图片加载库Fresco
Github地址: https://github.com/facebook/fresco
// 1.添加依赖(最新已经更新到2.2.0)
api 'com.facebook.fresco:fresco:1.9.0'
// 2.清单文件中添加权限
// 3.Application中初始化
Fresco.initialize(this);
// 4.布局文件中引用(更多设置自己百度哈)
android:layout_width="50dp" // 必须设置尺寸, 不支持wrap_content
android:layout_height="50dp"
app:actualImageScaleType="centerCrop" // 实际尺寸缩放类型
app:placeholderImage="@drawable/ic_default_user_logo" // 占位图
app:placeholderImageScaleType="centerCrop" // 占位图缩放类型
app:roundAsCircle="true" // 设置圆形图片
app:roundedCornerRadius="5dp" /> // 设置圆角图片
// 5.加载图片显示(三种方式)
simpleDraweeView.setImageURI("网络图片地址");
simpleDraweeView.setImageURI(Uri.fromFile(new File("文件管理中的图片地址")));
image.setImageResource(R.drawable."资源图片名");
二 上拉加载下拉刷新框架(设置修改头部自行百度)
Github地址:https://github.com/scwang90/SmartRefreshLayout
// 1.添加依赖
api 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1'
api 'com.scwang.smartrefresh:SmartRefreshHeader:1.0.5.1'
// 2.布局文件中使用
android:id="@+id/refreshLayout"
android:layout_width="@dimen/x0"
android:layout_height="@dimen/y0"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent">
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
// 3.代码中使用
mRefreshLayout.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener() {
@Override
public void onLoadMore(RefreshLayout refreshLayout) {
// 上拉加载
page++;
requestList();
}
@Override
public void onRefresh(RefreshLayout refreshLayout) {
// 下拉刷新
page = 1;
requestList();
}
});
// 数据返回之后停止下拉
mRefreshLayout.finishRefresh();
// 数据返回之后停止上拉
mRefreshLayout.finishLoadMore();
// 数据分页情况下, 当当前页大于等于总页数, 禁止上拉
if (page >= result.getPages()) {
mRefreshLayout.setEnableLoadMore(false);
} else {
mRefreshLayout.setEnableLoadMore(true);
}
三 仿微信图片选择
Github地址: https://github.com/LuckSiege/PictureSelector
// 1.1.添加依赖
api 'com.github.LuckSiege.PictureSelector:picture_library:v2.2.3'
// 1.2.项目gradle中
allprojects {
repositories {
jcenter()
maven { url 'https://jitpack.io' }
maven { url 'https://maven.google.com' }
}
}
// 1.3.权限
// 2.调用相机相册(最简单的使用, 使用之前最好百度, 了解所有属性设置)
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
.forResult(PictureConfig.CHOOSE_REQUEST);
// 3.图片接收, 展示到UI界面
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case PictureConfig.CHOOSE_REQUEST:
// 图片选择结果回调
selectList = PictureSelector.obtainMultipleResult(data);
// LocalMedia 里面返回三种 path
// 1.media.getPath(); 为原图 path
// 2.media.getCutPath();为裁剪后 path,需判断 media.isCut();是否为 true
// 3.media.getCompressPath();为压缩后 path,需判断 media.isCompressed();是否为 true
// 如果裁剪并压缩了,以取压缩路径为准,因为是先裁剪后压缩的
for(int i = 0;i < selectList.size(); i++){
imagePaths.add(selectList.get(i).getPath());
}
mAdapter.notifyDataSetChanged();
break;
}
}
}
四 屏幕适配方案(很多人都不知道的最佳适配方案)
Github地址: https://github.com/JessYanCoding/AndroidAutoSize
// 添加依赖
api 'me.jessyan:autosize:1.1.2'
// Application中配置(设置宽适配)
AutoSizeConfig.getInstance().setExcludeFontScale(true).setBaseOnWidth(true);
// 清单文件中设置UI图尺寸(单位是dp)
android:name="design_width_in_dp"
android:value="375" />
android:name="design_height_in_dp"
android:value="667" />
// 其实到这里适配就算完成了, 至于原理等多百度, 看看源码吧, 很简单。
五 Recycler适配器封装
Github地址: https://github.com/CymChad/BaseRecyclerViewAdapterHelper
// 依赖
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
// 选择自己所需要的,AndroidX和Support不共存
dependencies {
// 适用于AndroidX
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4'
// 适用于Support
api 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.42'
}
// 详细使用自行百度吧, 真的好用, 支持多布局, 支持拖拽排序(修改继承的BaseAdapter就可以)等等
六 底部选择弹框(时间、类型、省市县等)
Github地址: https://github.com/Bigkoo/Android-PickerView
// 添加依赖
compile 'com.contrarywind:Android-PickerView:4.1.9'
// 使用
// 时间选择器
TimePickerView pvTime = new TimePickerBuilder(MainActivity.this, new OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {
Toast.makeText(MainActivity.this, getTime(date), Toast.LENGTH_SHORT).show();
}
}).build();
// 条件选择器
OptionsPickerView pvOptions = new OptionsPickerBuilder(MainActivity.this, new OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int option2, int options3 ,View v) {
//返回的分别是三个级别的选中位置
String tx = options1Items.get(options1).getPickerViewText()
+ options2Items.get(options1).get(option2)
+ options3Items.get(options1).get(option2).get(options3).getPickerViewText();
tvOptions.setText(tx);
}
}).build();
pvOptions.setPicker(options1Items, options2Items, options3Items);
pvOptions.show();