【View学习】BackgroundLibrary第三方库学习,节省shape、selector创建时间

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

@TOC


前言

安卓在实现多种多样的功能时,一个View的显示功能时不可或缺的,而我们常常耗费大量时间在创建shape、selector上,不妨来学习一下这个开源库BackgroundLibrary,让我们的开发事半功倍。

当然最好的学习教程还是github作者提供的wiki和代码

一、BackgroundLibrary能做到什么?

BackgroundLibrary是一个快速开发开源库,它可以帮助我们轻松实现一些常见的属性设置,如圆角、描边和选择器等。使用BackgroundLibrary可以省去手动创建shape和selector的麻烦,从而节省我们的时间和精力

二、使用步骤

1.依赖方式

  1. gradle依赖(但是改导入方法可能找不到部分View)
gradle 复制代码
 repositories {
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
implementation 'com.github.JavaNoober.BackgroundLibrary:library:1.7.6'
  1. 模块导入 2.1 先从作者提供的代码拷贝模块libraryx搬迁到自己的项目里 2.2 然后在app模块的gradle添加这句
gradle 复制代码
dependencies {
    implementation project(':libraryx')
}

2.xml使用

xml 复制代码
    <com.noober.background.view.BLButton
        android:id="@+id/btn_login"
        style="?android:attr/borderlessButtonStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="登录"
        app:bl_corners_radius="20dp"
        app:bl_gradient_startColor="#E689E6"
        app:bl_gradient_centerColor="#4F94CD"
        app:bl_gradient_endColor="#ad2233"
        android:layout_marginHorizontal="100dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"/>

xml通过属性自动生成圆角和渐变色,无需创建shape

3.代码实时设置

kotlin 复制代码
        val btn_register = findViewById<Button>(R.id.btn_register)
        val build = DrawableCreator.Builder().setCornersRadius(dip2px(20))
            .setGradientColor(Color.parseColor("#E689E6"),Color.parseColor("#4F94CD"), Color.parseColor("#ad2233")).build()
        btn_register.background = build

4.部分常用属性,对应属性都有set()方法

  1. shape属性

| 属性 | 描述 |
|----------------------------------------------|-------------------------------------------------------|--------|--------|
| bl_shape | rectangle、oval、line、ring(暂时不支持) |
| bl_shape_alpha | drawable透明度,取值范围0-1 |
| bl_corners_radius | 圆角 |
| bl_gradient_startColor(centerColor、endColor) | 渐变色(始、中、终) |
| bl_text_gradient_orientation | 文字渐变方向(vertical、horizontal) |
| bl_stroke_width | 描边宽度 |
| bl_stroke_color | 描边颜色 |
| bl_shape_alpha | drawable透明度,取值范围0-1 |
| bl_corners_radius | 圆角 |
| bl_stroke_dashGap | 描边宽度,0时为实线 |
| bl_stroke_dashWidth | 描边虚线的间隔 |
| bl_stroke_position | 指定显示边框位置(left | bottom | right) |
| bl_position | left、right、top、bottom 设置drawable位于view的指定位置。一般用于图标带文字 |

  1. selector属性
属性 描述
bl_checkable_drawable(bl_unCheckable_drawable)
bl_checked_drawable(bl_unChecked_drawable) 点击后改变,适用于不带图标的RadioButton
bl_enabled_drawable(bl_unEnabled_drawable) --
bl_selected_drawable(bl_unSelected_drawable) 点击后变化,再点击恢复原样(适用于button),搭配属性(bl_selected_textColor)
bl_pressed_drawable(bl_unPressed_drawable) 触击时变化,松开恢复原样(适用于button、textView)
bl_focused_drawable(bl_unFocused_drawable) --
bl_focused_hovered(bl_unFocused_hovered)
bl_focused_activated(bl_unFocused_activated)
bl_checked_button_drawable(bl_unChecked_button_drawable) 点击后改变,适用于带图标的RadioButton、checkbox
  1. 其他属性
属性 描述
bl_ripple_enable 是否开启点击的水波纹效果,只支持sdk21以上版本
bl_ripple_color 水波纹颜色(如果开启,一定要有这个属性能生效,只支持sdk21以上版本)
bl_checkable_stroke_color 边框状态的属性。如果在版本1.6.1之前,sdk21以下,会没有效果,默认固定边框色取stroke_color的值,1.6.1开始,可以生效
bl_checked_stroke_color
....
  1. 属性结合
属性 描述
bl_multi_selector1 默认为true,加上-为false,以", "为分隔符,最后一项为资源id的名字。可选属性(state_checkable、state_checked、state_enabled、state_selectedstate_pressed、state_focused、state_hovered、state_activated)

因为属实有太多属性,我强烈建议去作者提供的wiki查看所有属性

5.增加xml中的属性代码提示

只需要去改路径下添加BackgroundLibrary.xml即可 C:\Users\用户名\AppData\Roaming\Google\AndroidStudio2021.3\templates 在文章顶部可以看到改文件,下载使用即可。如果没有也可以去作者wiki里下载。

总结

该库的使用其实不难,但是我个人只在实习的公司使用过,没有经常使用,所以是否会与其他属性冲突,或者有其他bug还不可知,但是其他的圆角,和描边、填充等基础属性是没问题的,公司中的项目已经用上该三方库了。 至于以后遇到什么问题或者还有补充的地方我会再回来补充。

现在有个疑惑就是,预览没有效果,就是按照作者提供的方法自定义View也没有效果,如果有同学知道的,还请在评论区指导我操作一下。 因为公司代码是可以预览的,我确信库是没问题的,就是我操作有问题。

相关推荐
智慧老师25 分钟前
Spring基础分析13-Spring Security框架
java·后端·spring
lxyzcm27 分钟前
C++23新特性解析:[[assume]]属性
java·c++·spring boot·c++23
V+zmm101341 小时前
基于微信小程序的乡村政务服务系统springboot+论文源码调试讲解
java·微信小程序·小程序·毕业设计·ssm
锋风Fengfeng1 小时前
安卓15预置第三方apk时签名报错问题解决
android
Oneforlove_twoforjob1 小时前
【Java基础面试题025】什么是Java的Integer缓存池?
java·开发语言·缓存
xmh-sxh-13141 小时前
常用的缓存技术都有哪些
java
User_undefined2 小时前
uniapp Native.js原生arr插件服务发送广播到uniapp页面中
android·javascript·uni-app
AiFlutter2 小时前
Flutter-底部分享弹窗(showModalBottomSheet)
java·前端·flutter
J不A秃V头A2 小时前
IntelliJ IDEA中设置激活的profile
java·intellij-idea
DARLING Zero two♡2 小时前
【优选算法】Pointer-Slice:双指针的算法切片(下)
java·数据结构·c++·算法·leetcode