一 、图片加载库Fresco
-
Github地址: https://github.com/facebook/fresco
-
// 1.添加依赖(最新已经更新到2.2.0)
-
api 'com.facebook.fresco:fresco:1.9.0'
-
// 2.清单文件中添加权限
-
<uses-permission android:name="android.permission.INTERNET" />
-
// 3.Application中初始化
-
Fresco.initialize(this);
-
// 4.布局文件中引用(更多设置自己百度哈)
-
<com.facebook.drawee.view.SimpleDraweeView
-
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.布局文件中使用
-
<com.scwang.smartrefresh.layout.SmartRefreshLayout
-
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.support.v7.widget.RecyclerView
-
android:id="@+id/recyclerView"
-
android:layout_width="match_parent"
-
android:layout_height="match_parent" />
-
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
-
// 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.权限
-
<uses-permission android:name="android.permission.CAMERA"/>
-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-
// 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)
-
<meta-data
-
android:name="design_width_in_dp"
-
android:value="375" />
-
<meta-data
-
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'
-
}
-
// 详细使用自行百度吧, 真的好用, 支持多布局, 支持拖拽排序等等
六 、底部选择弹框(时间、类型、省市县等)
-
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();