美文网首页android开发技巧Android学习
基本UI组件的封装库(四)——basicUI

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

作者: Peakmain | 来源:发表于2020-03-28 17:07 被阅读0次

    以下是我的基本UI组件该系列的文章,欢迎大家转载和分享:
    基本UI组件的封装库(一)——basicUI
    基本UI组件的封装库(二)——basicUI
    基本UI组件的封装库——basicUI的demo的编写
    基本UI组件的封装库(三)——basicUI
    基本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<String> 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压缩前后


    压缩前的大小.png
    压缩后图片的大小.png

    recyclerview悬浮和分组

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

    example

    public class GroupLinearAdapter extends BaseGroupRecyclerAdapter<GroupBean> {
        public GroupLinearAdapter(Context context, List<GroupBean> 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);
        }
    }
    
    
    LinearLayoutManager实现分组.gif
    • GridLayoutManager实现分组:大家只需要继承BaseGridGroupRecyclerAdapter就可以了
      只有两个方法:构造方法和convert,主要作用就不阐述了
      example:
    public class GroupGridAdapter extends BaseGridGroupRecyclerAdapter<GroupBean> {
        public GroupGridAdapter(Context context, List<GroupBean> 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);
        }
    }
    
    
    GridLayoutManage实现分组.gif
    • LinearLayoutManager实现悬浮效果,大家只需要继承BaseSuspenisonItemDecoration,实现其中的getTopText,如果大家需要设置样式还需要在其中设置Builder去继承BaseSuspenisonItemDecoration.Builder,使用还是很简单的
      注意适配器需要调用这个方法:保证标题单独占一行
     mGroupAdapter.adjustSpanSize(mRecyclerView);
    

    example:

    public class SuspenisonItemDecoration extends BaseSuspenisonItemDecoration<GroupBean> {
    
    
        public SuspenisonItemDecoration(Context context, List<GroupBean> data) {
            super(context, data);
        }
    
        public SuspenisonItemDecoration(BaseSuspenisonItemDecoration.Builder builder) {
            super(builder);
        }
    
        @Override
        public String getTopText(List<GroupBean> data, int position) {
            return data.get(position).getTime();
        }
        public static class Builder extends BaseSuspenisonItemDecoration.Builder<Builder,GroupBean> {
            public Builder(Context context, List<GroupBean> 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);
    
    LinearLayoutmanager实现悬浮.gif

    目前设置的参数有:
    1、设置背景颜色
    2、设置文字到左边的距离
    3、设置文字到底部的距离
    4、设置文字到顶边的距离
    5、置顶距离文字的高度 默认是30
    6、两个置顶模块之间的距离,默认是10
    7、设置文字的大小
    8、设置文字的颜色
    9、设置文字是否居中

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


      GridLayoutManage实现悬浮.gif

    ItemTouchHelper实现拖拽和删除

    大家只需要继承BaseItemTouchHelper就可以了,只需要就参数传进去就好
    for example

    public class GridItemTouchHelper extends BaseItemTouchHelper<GroupBean> {
    
    
        public GridItemTouchHelper(RecyclerView.Adapter adapter, List<GroupBean> 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

    ItemTouchHelper实现删除和拖拽.gif

    相关文章

      网友评论

        本文标题:基本UI组件的封装库(四)——basicUI

        本文链接:https://www.haomeiwen.com/subject/eqqsuhtx.html