以下是我的基本UI组件该系列的文章,欢迎大家转载和分享:
基本UI组件的封装库(一)——basicUI
基本UI组件的封装库(二)——basicUI
基本UI组件的封装库——basicUI的demo的编写
基本UI组件的封装库(三)——basicUI
我在之前BasicUI项目一共包括了:
1、Recycleview的封装,支持单布局和多布局,支持添加头部和底部,还包括了悬浮列表的基本封装。
2、dialog的封装。支持从底部弹出,并可设置动画,是否宽度全屏等样式。
3、NavigationBar的封装,可以在activity中动态设置添加头部。
4、PopupWindow的封装
5、editText的封装,自带清除按钮,并设置按钮的颜色和按钮的资源
6、TextView的封装、支持设置背景颜色和背景的圆角大小,以及支持设置文字上下左右的图标居中,
7、流式布局的封装(支持刷新数据)
8、仿今日头条的TableLayout
9、花束加载loading效果
10、仿58同城多条目菜单删选封装
11、loading三个:视察动画,仿钉钉的loading,仿老版58同城加载的loading
12、自定义支付密码键盘
13、九宫格解锁
这次新增和修复的功能:1、修复recyclerview的悬浮只支持linearlayoutmanager的问题,2、添加分组LInearlayoutManager和gridlayoutManager功能 3、ndk实现图片压缩功能(目前只支持arm64-v8a、armeabi-v7a、x86)
如果大家有什么问题,欢迎您在下方留言或者在BasicUI项目中留下问题
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.Peakmain:BasicUI:0.1.0'
}
因为我现在只编译了arm64-v8a、armeabi-v7a、x86三个的libjpeg的so,所以大家需要在app项目中添加
ndk{
abiFilters "armeabi-v7a","arm64-v8a","x86"
}
使用方式有两种
一、用CompressUtils
CompressUtils compressUtils = new CompressUtils();
Bitmap bitmap=compressUtils .decodeFile(path);
compressUtils .compressImage(bitmap, mQuality, path);
第二个参数是指你要压缩图片的质量,path是你要压缩图片的路径,目前是你原图的路径
第一个方式比较粗暴,适合改变原图和单张图片的情况
二、第二种方式用ImageCompressUtils的方式去压缩多个图片,单个图片也支持
//设置输出文件目录
String directory = Environment.getExternalStorageDirectory() + "/peakmain";
ImageCompressUtils.with(this)
.load(mImageLists)//设置加载图片集合
.ignoreCompress(100)//设置忽略的图片大小单位是kb
.setQuality(90)//设置压缩质量
.setOutFileDir(directory)//设置输出文件目录
.setCompressListener(new OnCompressListener() {
@Override
public void onStart() {
Log.e(BuildConfig.TAG,"开始压缩");
}
@Override
public void onSuccess(List list) {
Log.e(BuildConfig.TAG,"压缩完成");
}
@Override
public void onError(Throwable e) {
Log.e(BuildConfig.TAG,"压缩错误"+e.getMessage());
}
}).startCompress();
这里需要注意几点:1、ignoreCompress默认是100kb,2、setQuality默认不传的情况下是100,3、setOutFileDir设置的是你要保存的图片路径,这里指的是目录,4、我现在的demo上面是没有添加6.0以上权限认证,大家测试apk记得开启下权限
example
public class GroupLinearAdapter extends BaseGroupRecyclerAdapter {
public GroupLinearAdapter(Context context, List data) {
super(context, data, R.layout.item_recycler_group, R.layout.item_group_head);
}
@Override
protected void convertHead(ViewHolder holder, GroupBean item) {
holder.setText(R.id.tv_index, item.header);
}
@Override
public void convert(ViewHolder holder, GroupBean item) {
ImageView imageView = holder.getView(R.id.iv_image);
ImageLoader.getInstance().displayImage(mContext, item.getUrl(), imageView, 0);
}
}
public class GroupGridAdapter extends BaseGridGroupRecyclerAdapter {
public GroupGridAdapter(Context context, List data) {
super(context, data, R.layout.item_recycler_group);
}
@Override
public void convert(ViewHolder holder, GroupBean item) {
ImageView imageView = holder.getView(R.id.iv_image);
ImageLoader.getInstance().displayImage(mContext, item.getUrl(), imageView, 0);
}
}
mGroupAdapter.adjustSpanSize(mRecyclerView);
example:
public class SuspenisonItemDecoration extends BaseSuspenisonItemDecoration {
public SuspenisonItemDecoration(Context context, List data) {
super(context, data);
}
public SuspenisonItemDecoration(BaseSuspenisonItemDecoration.Builder builder) {
super(builder);
}
@Override
public String getTopText(List data, int position) {
return data.get(position).getTime();
}
public static class Builder extends BaseSuspenisonItemDecoration.Builder {
public Builder(Context context, List data) {
super(context, data);
}
@Override
public BaseSuspenisonItemDecoration create() {
return new SuspenisonItemDecoration(this);
}
}
}
随后在activity中recycleview添加分割线即可,两种方式
//第一种方式:调用build方法去设置一些参数
BaseSuspenisonItemDecoration itemDecoration = new SuspenisonItemDecoration
.Builder(this, mGroupBeans)
.setTextCenter(true).create();
//第二种方式:直接new
SuspenisonItemDecoration suspenisonItemDecoration = new SuspenisonItemDecoration(this, mGroupBeans);
mRecyclerView.addItemDecoration(itemDecoration);
目前设置的参数有:
1、设置背景颜色
2、设置文字到左边的距离
3、设置文字到底部的距离
4、设置文字到顶边的距离
5、置顶距离文字的高度 默认是30
6、两个置顶模块之间的距离,默认是10
7、设置文字的大小
8、设置文字的颜色
9、设置文字是否居中
大家只需要继承BaseItemTouchHelper就可以了,只需要就参数传进去就好
for example
public class GridItemTouchHelper extends BaseItemTouchHelper {
public GridItemTouchHelper(RecyclerView.Adapter adapter, List data) {
super(adapter, data);
}
}
使用很简单
GridItemTouchHelper itemTouchHelper = new GridItemTouchHelper(mGroupAdapter, mGroupBeans);
itemTouchHelper.attachToRecyclerView(mRecyclerView);
mGroupAdapter.adjustSpanSize(mRecyclerView);
//获取更新后的数据
itemTouchHelper.setOnDataUpdatedListener(datas -> {
for (GroupBean data : datas) {
Log.e(BuildConfig.TAG, data.isHeader ? "head" : data.getUrl());
}
}).setGridDragFlags(ItemTouchHelper.UP);
一共有以下几个方法可以调用
1、attachToRecyclerView需要将itemTouchHelper和recycleview进行绑定
2、setOnDataUpdatedListener可以获取到拖拽和删除后的数据
3、setGridDragFlags:设置GridLayoutManager 的拖拽flags,默认是 ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT | ItemTouchHelper.UP | ItemTouchHelper.DOWN
4、setLinearDragFlags:设置LinearLayoutManager 的拖拽flags,默认是 ItemTouchHelper.LEFT | ItemTouchHelper.UP | ItemTouchHelper.DOWN;
5、setSwipeFlags:设置滑动删除的flags:默认是 ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
6、设置数据:setDatas