基本UI组件的封装库(四)——basicU

以下是我的基本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项目中留下问题

Gradle依赖

  • Step 1. Add the JitPack repository to your build file
    Add it in your root build.gradle at the end of repositories:
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
  • Step 2. Add the dependency
    dependencies {
            implementation 'com.github.Peakmain:BasicUI:0.1.0'
    }

使用

ndk实现图片压缩

因为我现在只编译了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记得开启下权限

我自己项目做的一个demo压缩前后
基本UI组件的封装库(四)——basicU_第1张图片
基本UI组件的封装库(四)——basicU_第2张图片

recyclerview悬浮和分组

  • LinearLayout分组:大家只需要适配器去继承BaseGroupRecyclerAdapter就可以了
    一共有三个方法:构造方法,converHead,convert
    构造方法:主要设置头部布局和内容布局
    converHead:主要设置分组标题数据
    conver:设置内容数据

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);
    }
}

  • GridLayoutManager实现分组:大家只需要继承BaseGridGroupRecyclerAdapter就可以了
    只有两个方法:构造方法和convert,主要作用就不阐述了
    example:
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);
    }
}

  • LinearLayoutManager实现悬浮效果,大家只需要继承BaseSuspenisonItemDecoration,实现其中的getTopText,如果大家需要设置样式还需要在其中设置Builder去继承BaseSuspenisonItemDecoration.Builder,使用还是很简单的
    注意适配器需要调用这个方法:保证标题单独占一行
 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、设置文字是否居中

  • GridLayoutManage实现悬浮
    首先大家需要进行分组,分组方法使用刚才我介绍的GridlayoutManager中的分组,随后大家和刚才LinearLayoutManger悬浮使用方式一样即可,勿忘调用adjustSpanSize方法

ItemTouchHelper实现拖拽和删除

大家只需要继承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

你可能感兴趣的:(android架构)